Velocity

方向を定めて

工場勤務時代とソフトウェアエンジニアになってからの、仕事の充実度の比較

はじめに

高校卒業後、工場でメンテナンスを行う物理系エンジニアとして働いていた。
1年半勤めた後に転職、ソフトウェアエンジニアとしてのお仕事をしている。(2017/11~)

エンジニアからエンジニアの転職だが、畑が全く違うので (当然だが) 転職したての時の日々の生活のギャップはすごかった。

工場で働いていた時の事を忘れないうちに、それぞれの職種での業務経験を比較してみる。

仕事の充実度の比較

1日24時間しかない内、仕事が占めるウェイトは非常に大きい。

仕事が充実していると人生はさらに楽しくなるという考え方があるが、自分はそれを全力で肯定するタイプだ。 後50年弱は働かないといけないと考えると、人生を楽しむためには、仕事にやりがいを持つことはマストだと思う。

転職して、ソフトウェアエンジニアになり、コードを書いて。なんとなく以前よりも仕事を楽しむことができているような気がする。 この理由を探るために なんとなく をもう少し抽象化してみる。

まず、仕事においての充実度を比較するために自分の中の判断基準を整理してみる。


1. 明確な課題があり、それについて考え自分からアクションを起こせる機会があるか?

  • 昔から、課題について考え答えを出す という作業が好きだった
  • 課題をクリアした時の喜びと、様々なアプローチがあるというポイントが個人的に重要
  • ゲームが昔から大好きなのもこれが関係していると思う


2. 取り組む課題には様々な結果が存在するか?

  • 例えば 1+1=? おそらくこの式は誰に訊いても同じ答が返ってくる
  • 上は極端な例だが、この問題はアプローチによって結果が変わることはない
  • 業務の成果が物事への取り組み方や考え方によって変動する方が個人的にやりがいを感じる (大体の職種がそうだろ というツッコミがあるかもしれないがメンテナンス職などは、人によって結果が左右されることは比較的少ない)


3. 人とコミュニケーションを取る頻度が多いか?

  • 物事を考えている時間も好きだが、誰かと話したりする事も大好き
  • もしくは問題解決のために相談する機会が多いかどうか


以上3点が、自分の中での仕事の充実度を測る三本柱だと思う。

この3つの視点から、ソフトウェアエンジニアとして働いている今と工場で働いていた時の仕事の充実度を比較していく。

これはあくまで個人的な比較なので、どちらかの職種を否定するようなことは一切ない。


明確な課題があり、それについて考え、アクションを起こせる機会があるか?

ソフトウェアエンジニアとして働いている現在

ソフトウェアエンジニアとして仕事をしていると、どのような開発をしている場合にも、大なり小なり課題・問題にぶち当たると思う。

  • どうすればユーザーの体験をより向上できるか?
  • どのような設計にすると改修がしやすいか?
  • なぜこの変数が undefined なのか?

開発中は課題だらけだ、好き嫌いに関係なくエラーが襲ってくる。
まぁこれは物事を考える機会になるので嬉しい悲鳴といったところか。。。

自発的にアクションを起こせる機会も非常に多く、コーディング中はそのスパンが非常に短い。 Googleで検索して関連記事を漁ったり、ログを出してみたり、設定を変更してみたり、非常に様々だ。 課題の規模によるが、良いアイデアがあれば改善に向けたアプローチも積極的に行うことができ結果に繋がることが多いと感じている。


工場で勤務していた時

明確な課題は存在していたが、大体の作業は手順書がありルーティン化されている。 考える機会はイレギュラーなケースが発生した際など非常に少なく、誰がやっても結果大体は同じ結果になる。

この時は時計の針が17:30を指すのをひたすら待ち続けているような感覚だった。


上記を踏まえた個人的な比較はこんな感じ。

現在 >>> || 超えられない壁 || >>> 工場勤務時代


取り組む課題には様々な結果が存在するか?

ソフトウェアエンジニアとして働いている現在

成果物には様々な結果が存在する。

見た目上同じ結果になったとしても、本質的には差異が出る場合がほとんど。例えば...

  • どのようなシステム構成にしたか システムのパフォーマンス、実装コスト、金銭コストが異なる

  • ダイアログに表示するボタンは何色にしたか、どのくらいの大きさにしたか 細かな差異によってUXは左右される

  • function writeArticle(text) {} と書くか const writeArticle = text => {} と書くか → 同じ動作をする場合が大抵だが、thisbind されたり、巻き上げがあったりなかったり、可読性が異なる

よく プロの仕事は細部に宿る と言われるが、エンジニアの世界でも全く同じだと思う。 変数名の付け方や、エラー処理のハンドリングの方法など、細かい事を詰めていく事に楽しさややりがいを感じるタイプなので、割と向いている気がする。


工場で勤務していた時

定期点検などのメンテナンス業務は、誰がやったとしても同じ結果になることが多く、異なる結果になってとしてもそれを体感できる機会は少ない

試しに、モーターのメンテナンスの作業のクオリティによって結果が異なる例を挙げてみる。

  • 油を挿す量が少なかったため、1年後に軸の部分が焦げ付いてしまっていた。
  • サビ落としが甘かったため、塗ったペンキが半年で剥がれてしまった。

このように時間経過を伴うことが多く、自分でその事象を確認することは少ないため、一個人としての結果としては非常に感じにくい。


個人的比較は下の通り。

現在 >>> 工場勤務時代


人とコミュニケーションを取る頻度が多いか?

ソフトウェアエンジニアとして働いている現在

コーディング中は基本一人。
構成や詰まった所をSlackで相談することもあるが、頻度としては比較的少ないと感じている。

工場で勤務していた時

ほとんどの作業を誰かと一緒に行うため、常にコミュニケーションを取りながら業務をこなしていた。休憩が午前中と午後に一回ずつあるため談笑をする機会も多かった。

余談だが、自分が勤務していた工場では 休憩の事を 一服 と呼んでいた。(タバコを吸う人が多いため)
自分はタバコを吸わないのだが、一服一服〜と言いながら休憩に入るのは中々乙なものだった。


ここの比較はこんな感じ。

現在 <<< 工場勤務時代


仕事の充実度を比較して分かったこと

前文の通り、ソフトウェアエンジニアに転職してから仕事が楽しいとは感じてはいたが、それが何故なのかはあまり理解していなかった。


前職と今を比較してみた結果として、仕事が楽しいと感じていた理由は、

自分のアプローチ次第で結果が変動し、それを一日を通して短スパンで体感することができるから

だと分析することができた。


人とコミュニケーションを取る頻度は以前より少なくなってしまったが、これはトレードオフだと感じている。(チームにもよるのだろうけど)

意外と面白かったので、次は1日の過ごし方でも振り返ってみようかな〜というお気持ち。


Twitterやってます、気軽にフォローしてください☺️ twitter.com

Vue CLI での環境構築覚え書き (2.x/3.x)

業務でVue.jsを使う機会があり、Vue CLIについて調べたのでまとめた

Vue CLIとは

Vue.jsを使った開発環境を整えるためのCLI (Command Line Interface)

2018/08/01現在、Vue CLI 3のステータスがRC (Release Candidate)*1
よって、正式バージョンのリリースが秒読み状態
数ヶ月もすれば環境はガラッと変わっていると思うので、ご参考までに。

前提条件

Node.jsとnpmがインストールされていること

インストール

npm i -g vue-cli

2018/08/01現在、stable versionの 2.9.6 が入る

今すぐ3.xを試したい好奇心旺盛な人は、
npm i -g @vue/cli

3.x へのアップデートに伴い、vue-cliから@vue/cliにパッケージ名が変更されている
2.x が入っていて 3.x に上げたい人は、npm rm -g vue-cli してから、3.xをインストールする必要があるみたい

プロジェクトの作成

vue create {project-name}

Vue CLI 3ではプロジェクト作成の推奨コマンド

Usage: create [options] <app-name>

create a new project powered by vue-cli-service


Options:

  -p, --preset <presetName>       Skip prompts and use saved or remote preset
  -d, --default                   Skip prompts and use default preset
  -i, --inlinePreset <json>       Skip prompts and use inline JSON string as preset
  -m, --packageManager <command>  Use specified npm client when installing dependencies
  -r, --registry <url>            Use specified npm registry when installing dependencies (only for npm)
  -g, --git [message|false]       Force / skip git initialization, optionally specify initial commit message
  -f, --force                     Overwrite target directory if it exists
  -c, --clone                     Use git clone when fetching remote preset
  -x, --proxy                     Use specified proxy when creating project
  -h, --help                      output usage information

2系までのvue initに比べ、柔軟にプロジェクトを作成することができる

コマンドを入力すると、設定をデフォルトで行うかマニュアルで行うか聞かれるのでカーソルキーで選択し、Enterキーで確定する

defaultを選択した場合、babel + eslint の標準的なプロジェクトが作成される

Manually select featuresを選択した場合、プロジェクトに必要な要素を選択できるのだが...

正直チェックの付け方が分からなく、3分は悩んだ
Enterを押すと次の画面に行くし、適当なショートカットを探しても見つからない

結果から言うと 1~9 でチェックをON/OFFできる
この記事を読んだ方にはA~Zをポチりまくるという悲しいことは是非しないでいただきたい (恥を晒していくスタイル)

チェックできる要素は以下の9つ

  1. Babel
  2. TypeScript
  3. Progressive Web App (PWA) Support
  4. Router
  5. Vuex
  6. CSS Pre-processors
  7. Linter / Formatter
  8. Unit Testing
  9. E2E Testing

チェック後はEnterで先に進み、選択した機能に応じてyes/noを答えていく
TypeScriptがサポートされていたり、Linterの選択肢にPrettierが含まれていたり色々お〜となった

プロジェクトを作成した後は、
cd {project-name} でプロジェクトディレクトリに移動し、
yarn serve でアプリが立ち上がる(これはyarnの場合、npmの場合はnpm run serve)

vue init {template} {project-name}

Usage: init [options] <template> <app-name>

generate a project from a remote template (legacy API, requires @vue/cli-init)

Options:

  -c, --clone  Use git clone when fetching remote template
  --offline    Use cached template
  -h, --help   output usage information

2.x のプロジェクト作成時に良く使われてたコマンド

templateを基にした構成でプロジェクトを作成することができる テンプレートで良く使われるものは下の3つ

webpack

2018/8/1時点で一番starが付いているvue-cli用テンプレート(7,774)*2

webpackを使った単一ファイルコンポーネントのテンプレート
webpack + vue-loader + hot-reload + ESLint + Jest + Nightwatch

GitHub - vuejs-templates/webpack
A full-featured Webpack + vue-loader setup with hot reload, linting, testing & css extraction.

pwa

PWA(Progressive Web App)用のテンプレート

GitHub - vuejs-templates/pwa
PWA template for vue-cli based on the webpack template

webpack-simple

webpack + vue-loader とシンプルなテンプレートで見通しが良くカスタマイズしやすい
これも単一ファイルコンポーネントとして.vueファイルが生成される

GitHub - vuejs-templates/webpack-simple
A simple Webpack + vue-loader setup for quick prototyping.

こちらもいくつか質問されるので、良きように答える
するとプロジェクトが作成される

cd {project-name} でプロジェクトディレクトリに移動し
npm run dev でアプリが立ち上がる

段々雑になった気がしないでもないが、とりあえずこんな感じ

Vue CLI 3 の目玉機能の Vue CLI UI の体験も素晴らしいものだったので、気が向いたら記事書く.

*1:内部での最終テスト段階、β版の次のイメージ

*2:なんとなく非常に惜しい気がする

20歳のエンジニアは何を学ぶべきなのか

6月13日で21歳になる。
一般的にマイルストーンとされやすい 30歳 まで10年間も残されている。

はえ~、まだ21歳だからなんとかなるっしょ~鼻ほじ~
とか言ってたらいつのまにかおじいちゃんになってそう。


なので、誕生日を迎える前にスキルを棚卸しして、
今後のキャリアをなんとなく考えていこう という記事。


今現在の言語周りのスキルをまとめるとこんな感じ

JavaScript
 唯一まともに書ける言語
 CMSのカスタマイズを業務で5月末まで行っていた
 ReactやVueを使った開発経験は無し

GAS
 業務で扱っていたため、普通に書ける
 業務効率化の用途が多いため、関心は薄い

Golang, Python
 簡単なスクリプトは書けるが、業務経験としては無し

英語
 Reading → ライブラリとかに書いてある平易な英語なら読める
 Listening → 語彙力の無さ & ジャパニーズ耳だからやばい
 Speaking → 文章として組み立てれない、単語ベースになってしまう


整理してみると本当にしょっぱい。
エンジニアなりたてだからこんなもんなのかな~とか思ってたら、
いつの間にか7ヶ月経っててびびる。

業務ではプレーンのJSとjQueryしか触っていなくて、
モダンな環境で開発がしたいという気持ちが非常に強い。切実に。


そもそも自分がどういったエンジニアになりたいか明確に定まっていない部分が問題なんだと思う。

現時点では アーキテクチャAPIの設計 とか パフォーマンスの改善 を将来的にはやってみたい。
しかし元々フロントエンドに憧れていたので、SPAの実装とかにも興味あるし...といった感じで定まらない。

そういったことをやっている人が周りにいないので、話を聞くことが出来ないのが若干のつらみである。


正直今までの半年間、家でコードを書いている時間があまりなかった。
目標だけはいっちょ前で行動が伴っていない最悪のパターン、コード書こう。

個人的には今後需要が増していくであろうGoをガッツリ勉強していこうかなと思っている。
あとやっぱり英語はそこそこできるようになっておきたい。
ドキュメントすらすら読みたいし、何よりかっこいい。


家でコードたくさん書いてGoodでCoolなエンジニアを目指してこう!

エンジニアになった


エンジニアになった。


まぁ実際のところ、11月からエンジニアとして働いているので、そろそろ半年になる。


前の記事でRubyがなんちゃらかんちゃらと言っていたが、今はJavaScriptを主に書いている。

半年経って思うことは前職より明らかに自分に向いている。


前職は、地方の工場でメンテナンスを行っていた。


毎日コンセントを分解したり大きなパイプを修理したりしていた。
元々自分は手先が器用でもなく、パワー系の人でもないので肉体労働はしんどかった。

何より来る日も来る日も。同じような作業をすることが苦痛でしかなかった。
飽き性にとってルーチンワーク程恐ろしいものはない。いやそんなことないか。


対してエンジニアは毎日自分にとって新鮮な問題に取り組むことができる。
頭を働かせて、うーんうーんと物事を考えることは嫌いじゃないので性に合う。


また 解が一つではない という点も非常に面白いと思う。

  • 問題にどのようにアプローチするか?
  • 配列、オブジェクトをどのように回すか?
  • 変数名、関数名の付け方は?
  • インデントはどのように空けるか?


人が変わればコードが変わる。
当たり前だが本当に面白い世界だと思う。


毎日新しい技術がぽこぽこ出てくるのも素晴らしい。

新しいもの好き、情報収集好きな自分にとっては毎日漫画の新刊が出るようなものだ。
昼休みはQiitaのトレンド記事とはてぶITの人気エントリーを漁ることが日課になっている。


新しい技術を学び続けないといけないのはもちろん簡単なことではないと思うけど、
毎日ぼけーっと過ごすよりも、ずっとずっと幸せだと思う。



半年前はスチールをパイプを繋いでいたかと思えば、

今ではstreamをpipeで繋いでいる...


という無理やりなオチ、Node.js勉強中です。

github.com