この記事は Silbird Advent Calendar 2017 の19日目の記事です。
Who?
僕は元々、WebエンジニアとしてWebサイトのコーディング業務を行ってました。
主に扱っていた技術は、HTML/CSS/JavaScript/PHPです。
JavaScriptについては、jQuery(ライブラリも含め)を扱う事が殆どで、稀に素のJavaScriptを扱うレベルです。PHPを扱う場合は、CMS絡みの多少のカスタマイズが必要なレベルです。
現在は、SilbirdでC#を扱ったサーバーサイドの開発をさせてもらっています。
今年1年の振り返り
今年は、一言で言うとプログラマとしての一歩を踏み出せた年でした。
プログラマとは何か。フロントエンドエンジニアとは何なのか。サーバーサイドエンジニアとは何なのか。
何ができればそう思えるのか。これまでの自分を曇りなき眼で見定めたとき、HTML/CSSの領域に尽きた自分を
プログラマと思えたことはありませんでした。ですが、今は少しだけ自分のことをそう思えるようになれましたし、認められるようになれました。
エンジニア(プログラマ)と思えるようになれたのは
偏に、CTO, Chief, 隣で助けて下さったエンジニアの皆さんと社風のおかげです。
そして、自分自身の力であり、C#と出会えたことでもあります。
具体的に、下記に挙げたことを教わり、こなしていく中でそれを実感できたように思います。
テストをすること、レビューをしてもらうこと
開発スピードは爆速です。そんな中、スピードを意識しながら費用対効果が伺える改修や施策をガンガン当ててもらいました。
仕組み上でのエンジニアテストを行う中で、テストをするたびに既存を疑います。
テストはチェックだけではなく、サービスをよりよくするためのプロセスでもあります。
テストを行うことで、既存の仕様を理解し、更にはコードの読解力やコードを追う力も身に付いたように思います。
また、自分がどのようにテストしたのかを書くことで、言語仕様の齟齬にも気付き理解し直すことも出来ました。品質も担保出来ます。pullreqレビューでは、自分の書いたコードの改善点に気付き、知見を得ることが出来ました。
問題の解決方法とその考え方をエンジニア視点で伝えること
「実現したい内容と実装のかい離がないか、正しい問題にフォーカスしているか等を考えること、そして、それをエンジニア視点で伝えること」を意識出来るようになりました。
アウトプットすること
「量は質に転化する、量によって質が磨かれる」という言葉があります。社内エンジニア色強めなので、アウトプットすることで多くの技術のインプットを得ることが出来ます。
また、理解し合い(他人の考えを全否定することや考えを変えさせることではなく)、認識を擦り合わせることも、時に自分が主体となり、責任を持ってプロダクトをより良きものにすることも出来ます。
C#/ASP.NET に出会えて良かったこと
はじめの一歩として、C#に出会えたことは、JavaScript/TypeScript(AltJS)を理解し直す点でも大いに良い出会いでした。
静的型付け
型があることの良さとしては、いくつかありますが、
個人的には、下記のような利点があると感じました。
・そのメソッドが表しているデータの種類が分かる、またドキュメント替わりでもある
・コンパイル時に型違いだとエラーチェックが走る
・オーバーロード便利
型定義と実装の差が密接に結びついているので、なぜこのメソッドがあるのか、
このメソッドで何がしたかったのか、を知る道標にもなり、日々助けられています。
LINQ
LINQとは「Language Integrated Query」の略で、オブジェクト、データベース、XML等のデータに問い合わせ処理が可能です。簡単に書くとこんな感じです。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var nums = new List<int> { 1, 2, 3, 4, 5, 6 };
var queries = nums.Where(x => x % 2 == 0);
foreach (var query in queries)
{
Console.WriteLine(query); // 2, 4, 6
}
}
}
}
Whereメソッドは、複数の要素の中から条件に一致した要素を見つけるメソッドです。配列でもListでも、Dictionaryでもそれ以外のオブジェクトであっても、IEnumerableインターフェイスを実装している型であれば利用できます。LINQのメソッドは他にもいくつかありますが、SQLライクであったり、直感的で分かりやすく、コードも美しく端的に表すことができます。
MVCの概念(ASP.NET MVC)
MVC(Model-View-Controller アーキテクチャー)パターンを扱うとアプリケーションの各側面(MVCそれぞれが持つべきロジック/役割/債務)を分離することが出来ます。
各側面を分離することで、1つの側面に専念して開発することができます(それぞれが疎結合なので独自で開発することが出来ます)。今となっては、これがないと、どこに何を書けば良いのやら。。。と迷ってしまいます。
参考:https://msdn.microsoft.com/ja-jp/library/dd381412(v=vs.108).aspx
フロントエンド界隈でも、MVW(Whatever), MVVMパターンなどありますが、
ASP.NET MVCに触れられたおかげで、合わせて体系的に理解する足掛かりになりました。
最後に
拙い記事になってしまいましたが、僕は、Webの技術が好きで、フロントが好きで、でも今は C# も大好きです。お世話になっている先輩方や開発メンバーには、本当に感謝しかありません。人間的な面でも技術的な面でも尊敬しています。最初こそ挫けなかったのは、優しくも厳しく教え支えてもらえたからだと思っています。
百尺竿頭に行き着くことはないとは思いますが、行き着いたとしても更に一歩を進み、今後とも精進したいと思います。