C#で仕事をしていて,正しいプログラミングをしたいという思いがあったとしても,どのようにしてその知識を付けていけば良いのかが分かりませんでした。
例えばGoogleの検索エンジンで「C# サンプル」と検索しても当時であれば「WindowsFormsの実装サンプル」みたいなものや,「ファイルを開く」とか,「データベースに接続する」などといったピンポイントの技術のサンプルしか存在しません。
コード量でいうと10行から100行くらいで完結するようなサンプルしかWeb上にはありませんでした。
良いプログラミングのお手本がないとどうして良いのかわからない
どうやって学んだらいいかわからない
通常仕事というものは先輩から学びます。たいていの仕事は先輩のやり方を見て,先輩にやり方を教えてもらいます。でもこのIT業界というのは非常に特殊です。
先輩だから知っているわけではありません。
刻一刻と進化するIT業界で,先輩だから知っているなんて事はまったくありえないことです。歴史のある技術は先輩のほうが精通している可能性はあります。
今で言うとネットワークの技術というものは根本的には10年以上前からあまり変わっていませんし,ハブとかルーターとかの機能などの知識は先輩のほうがある可能性があります。
C言語なんかも古い言語で,完成されていて,枯れている言語なので,昔の知識が今でも十分通用します。
しかしC#というのは私が働きだしてから登場した言語です。以前はみんなVB6というオブジェクト指向を十分に生かせる言語ではなかったため,みんなボタンクリックイベントにだらだらと書いていくような実装をしていました。VB6にはコンストラクタという概念がありません。ということは完全コンストラクタパターンも当然できなかったわけです。
だから先輩の背中をみて学ぶということができなかったのです。今の新人の人は,先輩がオブジェクト指向に精通している可能性はあります。そういう人はラッキーなのでその人からたくさん学びましょう。学び方は一緒にプログラミングをするペアプログラミングが一番勉強になりますが,時間的な制約でそれができないのであれば,定期的にコードレビューを受けましょう。コードをチェックインする前にレビューを受けるのが理想ですが,無理なら週に1回とか,2週間に1回とかまとめてレビューしてもらっても良いです。
先輩が忙しいのであれば,ソースセーフやチームファンデーションサーバーから最新のチェックインの内容をレビューしてもらいましょう。
とはいえ,この作業には先輩やそのまた上司の理解が必要です。上司に無駄な時間と認識されるとできない作業になるので,そのあたりは中堅社員の力量が試されます。あなたの先輩にその力量があることを願います。なければエクストリームプログラミングの必要性を勉強して,社内に発表しましょう。
どんな感じで実装するのが正しいのか分からない
そんな感じでアプリケーション全体をどう実装するか?ということで参考になるプログラムのサンプルはWeb上にはあまり落ちていません。2015年~2017年にかけても結構探しましたが,特によさそうなものはありませんでした。
ということでみんなどうやって作っているのかなーっと色々調べていると,結局皆さんはオブジェクト指向などを学んで,よりより実装を模索しながら造っているようでした。
オブジェクト指向には原則というものがあり,そのあたりを意識したり,デザインパターンといわれるものを勉強すると,おのずとある一定の法則の元,アプリケーションの作成が行えるようなことがわかりました。
オブジェクト指向とデザインパターンに関しては後述するのでここでは控えます。
- C#erが5年目までに学ぶべき7ステップ!!
- C#を勉強する順番!オブジェクト指向からドメイン駆動開発まで#1-1
- C#を勉強する順番!とりあえず最低限の文法や開発環境の使い方の知識は必要#1-2
- C#を勉強する順番!WindowsFormsプログラミングで電卓なんかを作ってイベントなどを使えるようにする#1-3
- C#を勉強する順番!企業でのシステム開発とかだとDBを使うのでC#とDBをつなげる技術#1-4
- C#を勉強する順番!ボタンクリックイベントにだらだら書くのはなんか違う気がしてくる#1-5
- C#を勉強する順番!良いプログラミングのお手本がないとどうして良いのかわからない#1-6
- C#を勉強する順番!プログラミング初級講座とかいう大手の研修を受けてみたが#1-7
- C#を勉強する順番!良いプログラムとはリーダブルコード?コーディングルールを学ぶ#1-8
- C#を勉強する順番!第2章 オブジェクト指向との出会い#2-0
- オブジェクト指向を学ぶって事はデザインパターンを学ぶって事なんだな#2-1
- ドメイン駆動開発がオブジェクト指向をうまくコーディネートしていて最強みたい#2-2
- C#を勉強する順番!ドメイン駆動開発をするにはテスト駆動開発の知識が必須?#2-3
- C#を勉強する順番!テストコードのないプログラムは全部レガシーコードって呼ぶらしい#2-4