私は中規模のソフトウェア開発者として大規模な医療機関で働いています。 Microsoftテクノロジー(ASP.NETとSQL Server)を使用したIT業界で10年以上の経験があります。
カンファレンス、コードキャンプ、.Netユーザーグループミーティングに行くと、MVC、LINQ、Entity Framework、WCF Webサービスなど、あらゆる種類の新しいツールとテクノロジについて耳にします。 asp.net 2.0の同じ古いものを使用するゾーン。データアクセスレイヤーには型指定されたデータセットを使用しています。私はマスターページでWebフォームと機能豊富なサーバーコントロールを使用しています。アプリケーションで必要なデータを取得するために、単純な古いSQLを使用し、型指定されたデータセットでクエリを作成する方法を知っています。
私のキャリアを通して、私は自分のスキルセットで時代遅れにならないように常に敏感です。私が現在使用しているものは問題なく動作し、開発時間は短いです。しかし、もし私が解雇されるとしたら、インタビューで私が書いたMVCアプリの数を尋ねられるのではないかと心配しています。または、LINQまたはWCF Webサービスの使用方法。
いくつかの新しいテクノロジーで見る会議、本、ビデオの数は関係ないことを知っています...私はそれを実装/使用する必要があります。そうしないと単純に陥りません。また、面接するマネージャーは気にしません誰かが何かをどれだけ読み上げるか、テクノロジーの実際の使用と経験のみ。
書く新しいプロジェクトがあります。私は上司のところに行って、私が知らないテクノロジーを学習/実装するためのプロジェクトに追加の時間を求めました。私たちの組織は、従業員が「学び、成長」し、教育を続けることを奨励しています。しかし、実装する新しい何かを立ち上げるためにより多くの時間を要求するとき、私は常に抵抗を得ます。私のマネージャーは、これらの新しいテクノロジーを実装するための具体的なビジネス上の理由を求めています。私にはビジネス上の理由はありません。私の理由は、時代遅れになりたくないからです。将来、他の開発者がプロジェクトをより保守しやすくなると言えるかもしれません。ある時点で、これらの古いテクノロジの使用をやめることができるからです。 Linq/Entity Framework/MCVアプリのパフォーマンスは向上しますか?顧客(私がこのアプリを作成している部門のユーザー)が必要とするほど、そうですか?疑わしい。
私はあなたの男のこれについての考えに興味があります。あなたの多くは、新しい技術を使用しようとすることで同様の苦境を持っていますか?テクノロジーの最前線にいるとは思えません。これらのテクノロジーを使用するために明らかにする「ビジネス上の理由」はありますか?
前もって感謝します!テキストの長い壁でごめんなさい。
時代遅れにならないことは、新しいテクノロジーを使用するビジネス上の理由としてはかなり良いように思えます。それは両方の方向に流れます。スキルセットが古くなるのは望ましくありませんが、上司は、時代遅れのテクノロジーに進んで取り組んでいる従業員を見つけることができない可能性があることも心配する必要があります。開発者や雇用主の大多数が古いテクノロジーを新しいテクノロジーに任せた場合、会社にとってもそうするのに十分な理由になるかもしれません。
具体的に質問に答えるには、これらのテクノロジを個別に評価して、ニーズに合っているかどうかを確認する必要があります。私の見解をお伝えしますが、実際には、特定のビジネスニーズに適用するために、少なくとも半日はそれぞれを調査して評価する必要があります。
LINQ:これは、エンティティフレームワークがなくても使用できるものです。 LINQは、データのコレクションを操作するために使用されるテクノロジーであり、データベースからのデータのロードに使用しなくても、アプリケーションで使用できます。自分で好きにして、ラムダ式とLINQ拡張メソッドの使い方を学びましょう。それはあなたの時間を節約し、開発者としてのあなたの人生を楽にし、そしてあなたが書く必要があるコードの量を減らします。
エンティティフレームワーク:これは、Microsoftの世界におけるデータアクセスの未来のようです。 Microsoftの新しいフレームワーク、テクノロジー、ツールのほとんどは、エンティティフレームワークと連携するように設計されています。完璧ではありませんが、特にエンティティにLINQを使用する場合は、データセットを使用するよりもはるかに優れています。エンティティフレームワークを使用するビジネス上の大きな理由の1つは、フレームワークが生成するため、記述する必要があるSQLコードの量が減ることです。私の経験では、ほとんどの開発者はとにかくSQLを書くのが得意ではありません(ほとんどの企業には専用のDBAがいません)。エンティティフレームワークを使用すると、オーバーヘッドが少なく、データセットよりも扱いやすいPOCOを操作できます。
MVC:ほとんどのアプリケーションがそれからあまり利益を得ないかもしれないので、これは正当化するのが難しいかもしれません。私が見た最新の求人情報に基づくと、MVCはまだ少数派です(ただし、急速に進歩しています)。ほとんどのビジネスアプリケーションでは、MVCはやり過ぎになる可能性があり、いくつかのコントロールをaspxページにドラッグするだけで十分です。 MVCには学習曲線があり、生産性を上げて最大限に活用するには、HTTP、HTML、CSS、JavaScriptを本当に理解する必要があります。 MVCは、パフォーマンスが最優先事項である本当にカスタマイズされたWebアプリケーションが必要な場合にうまく機能します。それが当てはまらず、従業員がそれをあまり経験していない場合、おそらくそれを使用するための強力なビジネスケースはありません。
WCF Webサービス:リモートクライアントアプリケーションにデータを提供する必要がありますか? WCFはおそらく進むべき道です。データベースと同じサーバーまたはローカルネットワークで実行されるWebアプリケーションを作成しているだけですか? WCFを使用しないでください。WCFは必要ありません。WCFは、不必要な抽象化によって物事を複雑にするためにのみ役立ちます。
要するに、理にかなった場合は新しいテクノロジーを使用し、それがいつなのかを見つけるために時間をかけてください。新しいテクノロジーを習得するには多くの時間がかかりますが、それらを評価し、特定の状況に役立つかどうかを確認するのにそれほど時間はかかりません。これは、会社の上級管理職がすでにやるべきことですが、そうでない場合は、それを実行し、時間をかけて、学んだことを彼らに教える必要があります。
編集:上記のコメントを読んだ後、私はいくつかのより多くの考えを持っていました。アジャイルなアプローチでこのアプリを開発し、それをさまざまなコンポーネントに分割して、それぞれを完全に完了してから次のコンポーネントに進むことができれば、役立つかもしれません。上層部があなたが途中で着実に進歩していることを彼が見ることができれば、マネージャーはあなたが新しいテクノロジーのために余分な時間を取ることを承認する可能性が高くなります。また、アプリ全体をMVCで書き込むか、Entity FrameworkまたはASPXページとデータセットで書き込むかを選択する必要はありません。ハイブリッドアプローチを使用して、同じアプリで両方を使用することが可能です。 MVCおよびエンティティフレームワークをいくつかのコンポーネントに使用することから始めることができます。問題がなく上司が満足している場合は続行できますが、時間がかかりすぎると感じている場合は、ASPXページとデータセットを使用してアプリの残りの部分を開発できます。
新しいMSテクノロジのいくつかを確実に学ぶ必要がありますが、WPFやWCFなどについての私の最近の経験により、最新のMS APIの学習についてもう少し注意深くなりました。
現在、LINQは生産性を向上させるための大きな恩恵です。いい点は、実際のクエリ構文の有無にかかわらず、あらゆる種類のランダムな状況でLINQ-to-objectsを段階的に導入できることです(私は、_from-select
_構文なしでWhere()
を呼び出すのが一般的です) LINQの数学的なデュアルであるReactive Extensionsは、知っておくべきことですが、私はまだ本当に良いユースケースを見つけるのに苦労しています。同様に、C#3/4/5のすべての機能は役に立ちます。「古い」BCLのものを使い続けている場合でも、それらを調べて、それらが役立つ場所に注意する必要があります。
ただし、私は悪魔の支持者を取り上げて、WCFやWPFなどの非常に最新の大きなMSライブラリは必ずしも学習する価値がないことをお勧めします。
主な理由は、それらが巨大であり、特にうまく設計されていないことです(前者は後者の症状です)。私は最近 WPFが悪い について簡単にブログに書いた。 WCFに関しては whitepaper は、「Windows以外のシステムで実行されているJava EEサーバー」や「さまざまなプラットフォームで実行されているパートナーアプリケーション」と簡単にうまく相互運用できるように聞こえますが、真実はWCF APIは非常に具体的にSOAP指向であり、非SOAPプロトコルのサポートは非常に限られているということです。 MSは、プラグイン可能なプロトコルを許可する一般的なシステムを簡単に設計でき、機能はどこかに隠されている(文書化されていない)可能性がありますが、私が知る限り、SOAPと制限されたHTTP(メッセージ本文がシリアル化された.NETオブジェクト、IIRCである限り)。EntityFrameworkをより簡単に調査しましたが、(非常に単純な)いくつかのシナリオをサポートできないという不満に気づきました)LINQ-to-SQLはそのまま使用できます。
IMOこれらのすべてのライブラリの設計には根本的な欠陥があります。それらは互いに密に結合されている多くのコンポーネントを使用するためです。各フレームワークのクラスの依存関係グラフはおそらく巨大であり、落書き線の乱雑な混乱のように見えます。また、デザインが良かったとしても、下位レベルの詳細を掘り下げた公開の建築ドキュメントがなく、ほとんどの場合のMSDNドキュメントはあまりよくないため、わかりません(多くの場合、下位レベルおよび下位レベルのクラスを見ると、次第に役に立たなくなります。)
ライブラリのサイズも欠陥のようです。 20年以上に渡るプログラミングの中で、単純さが美徳であり、マイクロソフトがこれまでに評価したことがない美徳であることを学びました。
しかし、「それで何だ」と尋ねるかもしれません。まあ、そのような大きなライブラリでは、実際にそれらを理解しているように感じることは決してないかもしれません。つまり、MicrosoftがWCF/WPF/EFを具体的に設計したユースケース以外で何かをしたい場合、その方法を知ることはできず、レドモンドの外部の誰もその方法を知らない可能性もあります。そして、何かがうまくいかないとき、あなたは何がうまくいかなかったかを理解するのに苦労するでしょう。そして、Microsoftがnext次世代APIに移行してから15年経った今、誰もが、あまり理解されていません。
また、これらの新しいAPIは大きく複雑であるため、.NETのクロスプラットフォーム代替物であるMonoは、サポートが不十分であるか、サポートされていません。 LinuxまたはMacで型付きデータテーブルを使用するのにほとんど困難はないでしょうが、Entity Frameworkはどうでしょうか。気にしないで。 Mononeverがサポートしていても驚くことはありません。
新しいプロジェクトでLINQ-to-SQLを使用しましたが、悪くはありません。いくつかの点でそれはより良いかもしれませんが、開発者の経験はADO.NETよりも実質的に優れていると思います。重要な制限の1つ:アクティブなデータベース接続なしで動作するように特別に設計された古いADO.NETとは異なり、「接続」モードでテーブルを変更する場合、L2Sがはるかに簡単です。とにかく、LINQ-to-SQLは(Monoの人によると)Entity Frameworkのサイズの4分の1なので、MSがその作業をやめることにしたのは残念です。
Microsoft Windowsベースのソフトウェアを10年以上開発してから、完全にフリーのオープンソースソフトウェアに切り替えてMS開発を断念しました。私は長い個人的な経験からこれを書いています。
私がFOSSに切り替えたことによる他の理由は別として、プログラミングに関連する理由は、独自技術の学習/実装の正当化がほとんどないということです。問題の核心は、マイクロソフトがこれまでに配布したすべてのテクノロジをサポートすることを約束していないことです。 MSはAPIとフレームワークに廃止予定の変更を導入することがよくあります。これにより、既存のAPIの多くとその知識が古くなります。実際、エンドユーザーソフトウェアを使用してこれを実現しています。たとえば、MS Office 2007/2010はMS Office 2003と似ていません。さらに重要なのは、Windows 8が既存のプラットフォームから根本的に離れていることです。特に、Windows 8にはすべて新しいAPIとフレームワークが存在することになり、それらを実装しない限り、Windows 8を(現在ではないとしても、将来的に)サポートすることはできません。既存のテクノロジーと知識を常に陳腐化させ、さらに重要なことにnsupportedとするこの傾向は、MSがリリースする新しいテクノロジーの実装を続ける主なビジネス上の理由の1つです。 MSが古いテクノロジーのサポートを明日中止した場合、レガシーコードはどこに行きますか?アップデートはどこで入手できますか?
また、MS開発を中止してFOSSに切り替えるようにお願いしているのではありません。 MSテクノロジーで長い経験を積んできた私は、ここであなたを助けたいだけでした。
現在使用しているものは問題なく動作し、開発時間は短い
残念ながら、マイクロソフトはこれについていちじくを提供していません。彼らにとって重要なのは、より多くのツールを販売することです。つまり、新しいテクノロジーを作成するということです。つまり、より多くのトレーニングを購入する必要があります。彼らにとって、双方にとって好都合です。
あなたにとって、それは新しいことを学ぶための絶え間ない戦いを意味します、そしてあなたがそれらをうまく使い始めたら、あなたの開発生産性が以前と同じくらい速くなります...学ぶべき他の何かがあり、あなたは始めなければなりませんもう一度。ソフトウェアが一般的に低品質である理由があります。それは、ソフトウェアがエンジニアリングやアーキテクチャのような「プロフェッショナル」サービスのように扱われていないため、機能を維持します。私たちはそれらを捨て、常にゼロから始めます。
しかし、この貧しい世界の状態はあなたを助けません。したがって、私のアドバイスは、「テクノロジーに遅れずについていく」と「遅れを取りたくない」の組み合わせを使用することです。上司は採用に関心があるはずです。VB6開発だけを行った場合、新しいスタッフを採用するのは非常に困難です(実際には、おそらく非常に簡単です。VB6を好きだったすべての人があなたに集まります。しかしそれは別の問題です)。
新しいテクノロジーxが将来の開発をさらに迅速に行うのに役立つかどうかを確認する必要があると思います。個人的なタスクや無駄なタスクでなくなり、ビジネス改善タスクになるため、企業は常にR&Dの方法について取り組んでいます」革新」は彼らが競争力を維持するのに役立ちます。
開発者は、新しいテクノロジーを使用し、会社にもたらすメリットと価値(パフォーマンス、機能、使いやすさ、メンテナンスなど)を実証することで、管理をプッシュする必要があります。管理は通常、変更を嫌い、現在使用されているものに対していくつかの追加の利点をもたらさない限り、変更を正当化しません。
いくつかの新しい「最先端」テクノロジーを使用することは、マーケティングチームにとっても有益であり、レガシーテクノロジーやプラットフォームを使用して過去に行き詰まることなく、現在のテクノロジートレンドの上にある会社として会社を売り込むことができます。
新しいテクノロジーの使用を正当化する最良の方法は、それらが開発者の生産性を向上させることを示すことができる場合です。これは、より多くの作業を低コストで実行できることを意味します。それがビジネスの観点から重要な唯一のことです。
いくつかの例: