この記事はmast Another Advent Calendar 2018の19日目の記事です.
18日目は同級生kawaguchikoくんの記事でした.彼の記事おもろいので読んでみてください.
mast15の @chigichan24 です.四年生ですが,大学は二年目です.のらりくらりとプログラムを書いて遊んでいたらこんな感じになりました.mast15では自称プログラムが書けるマンとしてイキってます(ごめんなさい)
さて,いろいろと書きたいことを迷いました.迷ったけどこれにしました.理由はmastの人の多くは,ものづくりやメディア表現等を通して社会になんらかのメッセージを残すことを試みる集団であるからです.
技術へのこだわりとプロダクトを(ry
この言葉は私自身が,ものづくりをする上で大切にしている言葉です.(以前は「まずは手を動かしてみる」という言葉が好きでした)
誰かの偉人の言葉とかではたぶんないと思われます.このワードでぐぐってみる*1と,私のTwitterアカウントやWantedlyプロフールが見つかります.多分私が産み出した言葉なんだと思います.
さて,この言葉前半パート(1),後半パート(2)そして,結合パート(3)によって成り立っています.それぞれ分解して,解説していきましょう.
(1) 技術へのこだわり
私にはソフトウェアエンジニアとしての経験しかないため,ソフトウェアエンジニアが関係する「技術」についてのみ話すことにします.
一般論ではなく,個人的な見解として,程度の差はあれ多くのソフトウェアエンジニアはこだわりを持っています.
例えば,どの言語で開発を進めるのか?という議題.
PHPでしか経験がないから〜*2という人もいれば,スクリプト言語っぽいもので〜という人,今回は型をちゃんと使って〜とか,今Rustがキテるっぽいらしいよとかいろんなこだわりがあると思う.そのこだわりには
- 純粋なる知的欲求からくる希望
- 様々な開発現場で使ってきた経験からくる推し
- このほうが最新の規格だから,いろんな機能が使える
などなど様々.みんな技術に対して誇りや欲求をもって生きてます.
言語がやっと決まったら次は使うフレームワーク,使いたいアーキテクチャ,開発手法,CI/CDは回すの?レビューの進め方は?コーディングの規約は?使うIDEは?と言っていろんな決めごとに対して,開発するチーム(または個人)で同じようにこだわりを議論していきます.
(2) プロダクトを作り上げる
プロダクトには納期があるものがあります.納期は,学生のうちであればコンテストの締切とか,インターンシップでの期限とか,自分の熱が冷めないまでとかです.
納期までにものを作り上げることは,ものづくりをする上で常に付き纏います.完成させない状態でやっぱりだめでした😪と芸で済ませることも経験の一つです.*3
しかし,その質を客観的に見たときにどの程度まで詰められているのか?というのも求められる機会は多いです.会社に入ってソフトウェアエンジニアとして開発をしているならば,それは絶対的なものに近しいです.
これを達成するには入念なスケジューリングと進捗確認が大切です.これらを適切に管理できていれば,やっぱり駄目でしたとなることは少ないはずです.なぜならば見通しをある程度立てて計画をするため,このままだとまずいスケジュール感だとわかるはずだから.
(3) バランスを忘れない
これは(1)と(2) の取捨選択を適切に行いましょうというものです.
例えば,究極にスケジュールに余裕がない状態で絶対に使い捨てのプロダクトを作り上げないといけない状況があったとしましょう.こんなときに新しい言語で挑戦的にプログラムを作っていくことができるでしょうか?
答えはNoです.
実績のある言語を使って突貫的にでも完成を優先するべき.つまり,この場合は(2)の「プロダクトを作り上げる」を優先するべきということです.
他の例として,長期的に保守していく必要があるプロダクトを作る時,また,メンバーが新しく追加されるケースも多いとしましょう.品質も,多くのユーザがいるので高く保つ必要があるとしましょう.
このときに,上記のように突貫で作っていいでしょうか?
答えはNoです.
この場合は長期的に保守していける体制を保つために,どういった言語であれば良くて,どのようなアーキテクチャであればバグが少なく,また発生しても容易に特定できるか?を意識する必要があります.
現実の問題は上の2つの例のように単純ではありません.しかし,根本にあるのは技術をどう使っていくのか?どこまでこだわるのか?ということのはずです.
自分の立場を明確にする
さて,上の議論は「自分自身がものづくりに対してどういう気持ちで向き合っているか?」を考える上でも役に立ちます.
ちょうど式にするならば 0 ≦ α ≦ 1とするときに,
自分のお気持ち = α × 技術へのこだわり+ (1-α) × プロダクトへのこだわり
といった形で表わされる事ができます.
この言葉が自分の中で生まれた背景として「プログラミングは手段か?目的か?」という議論があります.
昔,特に高専時代は,私は絶対的にプログラミングは手段でしか無いと思っていました.けれど,プログラムそのものを学ぶうちにソフトウェアエンジニアであるならこれは目的であるべきだとも思うようにもなりました.
しかし,この議論自体0,1でどちらかの表明をする事はできない.時としてどちらかを優先するべきだなぁといろんなプロジェクトでコードを書いていくうちに思うようになりました.その上で,自分のマインドはαがだいたいこの辺りだと表明していくことが大事だという結論で,自分の中では決着がついています.*4
おわりに
今日は私がソフトウェアエンジニアとして,大事にしている言葉の紹介と詳解でした.みなさんも,ぜひ意識してみてはいかがでしょう?また,上の式の訂正や議論などもぜひ...
それでは.