私は主にC#指向の会社で働き始めました。 JavaやJRubyが好きな人は数人いますが、大多数のプログラマーはC#が好きです。私が採用したのは、ウェブアプリケーションの構築に多くの経験があり、RailsまたはnodejsでJRubyのような新しいテクノロジーに傾いているためです。
私は最近、短時間で多くのことを行うことに重点を置いたWebアプリケーションの構築プロジェクトに着手しました。ソフトウェアリーダーから、Railsの代わりにmvc4を使用するよう指示されました。 mvc4がわからない、C#がわからない、WebアプリケーションサーバーとフロントエンドUIの作成を担当しているのは私だけだということを除いて、それは問題ないかもしれません。
Mvc4を使用する代わりに、すでに非常によく知っているフレームワーク(Rails)を使用するのは理にかなっているのではないでしょうか。決定の背後にある理由は、技術リーダーがJruby/Railsを知らないため、コードを再利用する方法がないためです。
カウンター引数:
彼はコードに貢献することはなく、率直に言って、
このプロジェクト。したがって、JRuby/Railsを知っているかどうかは問題ではありません。
JRubyがコードをプルしたり、その逆ができるJavaアプリがたくさんあるので、実際にコードを再利用できます。実際、彼はJavaアプリでJRubyのJavaライブラリを実行するだけでなく、RailsライブラリをC#に変換するためにいくつかのリソースを投入しました。 JavaやJRubyが嫌いだから
私は多くのWebアプリケーションを構築しましたが、なじみのないものを使用するとスピンアップが発生し、以前のように素晴らしいアプリケーションを短時間で構築できません。これで結構です。この分野では、新しいテクノロジーを学ぶことが重要です。問題は、このプロジェクトでは、多くのことを迅速に行う必要があることです。
開発者が自分のツールを選択できるのはいつですか。これは会社に依存していますか?私の会社は嫌いですか、それともこれは正常と見なされますか?より緑の牧草地はありますか?私はこれを間違った方法で見ていますか?
私はあなたがチームリーダーと話をして、次のようなことを言わなければならないでしょう:
私はあなたが.NETショップであることを知っていますが、私はJava/JRubyRailsのスキルのために実際にhiredでした。この新しいアプリケーションは、[〜#〜] x [〜#〜]の時間で、すでに知っているツールを使用して構築できます。私はあなたが好きなようにC#/ mvc4を学ぶことができましたが、それは>> X時間かかります。なんでしょう?
これは、「skills-you-were-(assumedly)-hired-for」対「skills-you-need-now」の問題を引き起こし、新しいスキルを習得しようとしているが、それはこのツールセットは初めてなので、新しいアプリケーションの開発には時間がかかります。そして、あなたは新しいスキルを学ぶ用意があることを示したいと思います。新しいスキルを習得する機会を与えないことは、スキルが不要になったときに雇用を確実に終了させるための良い方法です。
最後にあなたの質問について:
開発者が自分のツールを選択できるのはいつですか。これは会社に依存していますか?私の会社は嫌いですか、それともこれは正常と見なされますか?より緑の牧草地はありますか?私はこれを間違った方法で見ていますか?
通常は会社によって異なります。会社がMSツールを購入してVisualStudioプラットフォームと.NETフレームワークですべてを標準化する場合、1人の開発者がLinuxとCの使用を主張すると非常に厄介になる可能性があります。これは正常です。出力が同じである限り、開発者にViとEmacsのどちらを選択させるかなど、会社がエディターについてそれほど煩わしくない場合、例外が存在する可能性があります。一部の企業では開発者にWindowsとLinuxの選択を許可していることも知っていますが、彼らが使用する言語は両方のOSに対して非常に優れたサポートとランタイムを備えています。
なぜ企業はこれを行うのですか?一貫性が1つの理由です。アプリケーションが、さまざまな開発者のお気に入りの言語/フレームワークで構築されたバイナリのパッチワークであり、さまざまなツールで構築され、さまざまなシステムでテストされている場合、デバッグが非常に困難になる可能性があります。すべての開発者がほぼの同様の設定で作業する場合、これらの種類の問題は解決されます。
あなたの場合、あなたはこの会社では標準的でない技術で働くように雇われたように思えます。これは私には奇妙に思えますが、あなたが雇った人になぜ彼らがそれを望んだのかについて話したいと思うかもしれません。
どの時点で開発者がツールを選択できるようにする必要がありますか?
チームに影響を与えない場合。
私はこれを間違った方法で見ていますか?
もちろんです。
はい、期限は短いです。はい、Railsでそれをより速く実行できます。しかし、会社全体としては、アプリケーションをデプロイして保守する必要があります。会社に安定した優れたC#開発者がいる場合、C#アプリを維持するほうが安上がり(そして品質が向上する)でしょう。
あなたのDBAや他の管理スタッフはおそらくそのスタックに精通しており、thatスタックをデプロイおよび更新するためのプロセスを用意しています。コードをより速く実行できたとしても、プロのWebアプリを稼働させるために必要なすべてのオーバーヘッドを考慮に入れると、さらに時間がかかる可能性があります。
アプリの作成よりも、アプリのメンテナンスに多くの時間を費やすことになります。そのコストを最適化します。
「新しい」テクノロジーに適応する能力があるため、採用されたようです。その点でC#も同じです。この機会に何か新しいことを学びたくないですか?
ASP.NET MVCは、多くの点で、Ruby on Rails)に非常に似ています。
あなたはいつまでもカタツムリのペースにはなれません。 RORをすでに知っている場合は、ASP.NET MVCが最適です。コツはC#を学ぶことです。
たぶん、あなたの上司はあなたに生産を望んでいます。彼らはあなたが会社に付加価値を与えることができるようにあなたを雇った。慣れていないフレームワークを使用することを強制することで、が次のことを引き起こすことを彼らが理解していることを確認してください:
最高のプログラマーであっても、新しい言語/フレームワークでウォームアップ時間が必要です。
新しい言語を学ぶのは良いことです。プログラマーとしてのスキルへの投資は、学習している言語/プラットフォームが近い将来になくなる可能性がある場合にのみリスクとなります。Microsoftと一緒に頑張っていれば、それは問題ではないと思います。 C#とMVCの両方に最近の更新があり、どちらも改善されており、パイプラインでさらに多くの更新が行われています。
個人的には、より円滑な開発者になることで、このような状況に二度とさらされなくなります。一番良いところ? あなたの上司はあなたにこれらのことを学ぶためにあなたにお金を払うでしょう、それはあなたがより多くのお金の価値がある自分を作るためにあなたが支払われることを意味します。
あなたはこの戦いに勝つことになるかもしれませんが、あなたは不機嫌な同僚と一緒に働くことになります。それぞれの長所と短所を上司に説明してください。そうすれば、どちらももう一方の端がより幸せになります。
どの時点で開発者がツールを選択できるようにする必要がありますか?
上記の開発者がソフトウェアのリーダーである場合。
確かに、生産性を心配している場合は、別のツールキットを使用することを認めることができます(そうすべきです)が、気に入らない答えに備えることができます。現在のアーキテクチャとの互換性、メンテナンスに関する問題、ライセンスの問題など、リードが特定のツールキットを使用することを望んでいるのは、はっきりとした正当な理由があるかもしれません。
ところで、フレーズ
多くのことを短時間で行うことに重点を置いています
何よりもソフトウェア業界の胸焼けと騒乱の原因となっています。
私はあなたがJRubyやJavaプログラマーとして雇われていたとは言っていません。
「[B]私はWebアプリケーションの構築に多くの経験を持っているため、そしてRailsまたはnodejsでJRubyのような新しいテクノロジーに傾倒しているためです。」
言い換えれば、彼らはあなたのウェブ体験とあなたの新しい技術を学ぶ意欲が好きです。
ウェブエクスペリエンスを使用して、新しいテクノロジーを学習するを求めています。
だから問題は、あなたはそれをするつもりなのか、それともしないのか?
ソフトウェアの最大の費用はそれのメンテナンスにあります
最大の費用(80%)はソフトウェアのメンテナンスに費やされていることを読みました。最初の開発は、開発の総コストのわずか20%です。
私は自分の母国語(英語ではない)でコードとコメントを開発した開発者についての事例を読みました。他のチームメンバーがコードの拡張と保守に行ったとき、言語(プログラミング言語ではない)が外国であったため、ほとんど不可能でした彼らへ。
同様に、自分で選択したプログラミング言語でコードを開発すると、他のチームメンバーが保守するのが難しくなります。
解決策:ペアプログラミング
雇用主に、必要なプログラミング言語を知っている他の誰かとペアを組んでもらい、一緒に仕事をするよう依頼することを検討してください。あなたはお互いから学ぶことができ、もしあなたがどちらかが会社を辞めた場合、もう一人はコードを知っています。
「ペアプログラミング」に関するウィキペディアの記事: http://en.wikipedia.org/wiki/Pair_programming
多くの企業は、自分が常に行ったことや「安全」なことに固執することを好むだけです。理由はありますJavaおよびPHPはまだ非常に人気があります。現時点では、deed.comで「COBOL」を検索すると2144個のリストが返されます...業界は良いコードを気にせず、できるだけ長く搾乳できるコードを気にします(これはC#が悪いことを意味するのではなく、実際にはそうではありません)。
これについて考えてください。コードはあなたよりも長持ちします。他の誰かがあなたのコードをメンテナンスする可能性は十分あり、C#はNode.jsやRailsよりも安全です。 Perlや、ある時点で「それ」と見なされてきた他の言語にすべて同じことが起こった後、5年か6年でRubyプログラマーの数が半分になったとしても、私は驚きません。 Web言語。Javascriptがなくなる可能性は低いですが、JavaがWebの一種のASM(またはC)として使用されていることをすでに確認しています-他の言語がサーバー側コードを作成するためにコンパイルできる中間言語非常に古くなる可能性があります。
開発者が目標を実装する方法を選択する際の私の主な懸念は、通常、コードを編集することだけを想定していることです。 12か月後、彼らは変更が必要になるかもしれません。あなたは利用できず(会社を辞めるか、別のタスクで本当に忙しい)、別の開発者がコードをチャーンする必要があります。 C#ショップの場合、ツールセットを使用することは優れたチームワークです。新しいテクノロジーは調査して実装する必要がありますが、リードが適切なタイミングであると判断した場合にのみ、1つではなく多くの目標に目を向けます。
裏返してください。あなたがRuby開発者を雇っている人であり、彼らがAsp.net/MVCに彼らの仕事を実装することを主張していると想像してください。
彼らに何と言いますか?これが私たちのスタックです。それとともに生きることを学びなさい。
黄金のルールは、ここに、金を持っている彼女がルールを作ることです。
いくつかの相反する目標があり、問題は最善の妥協点を見つけることです。期限があり、特定のツールセットを要求するチームリードがあり、そのツールセットに不慣れな開発者が(明らかに短い)時間枠内で何かを作成する運命にあります。
チームリーダーには、彼がこのツールセットを正確に要求するいくつかの正当な理由があることを理解しておくことが重要です(その1つは、まだ知らないかもしれない何らかの理由で、このツールセットに慣れるのに実際に役立つ可能性があります)。最初の実行でできる最善のことは、これらの理由を正確に理解することです。
あなたの立場に立って、私はチームリードと話をして、あなたの見解である状況、およびオプションとどの結果(短期および長期の経済効果を含む)が生成されるかを説明するように努めますこれらの各オプションに従います。たとえば、経験豊富な別の開発者をコーチに任命することができます。
チームリードが完全な独り言でない限り、プロジェクトと会社の全体的な目標に関して意味のあるコンセンサスを見つけることができるはずです。
ええと。誰もが間違っています。
それらの1つのプラットフォームの人々よりも優れた開発者になると、彼らはこれまでよりもはるかに興味深いオプションを利用できます。したがって、今のところ、MVCを学んでください。そして、あなた自身の時間に、本当に興味のあるプラットフォームについてもっと学んでください。 Nodeスキルを構築します。いくつかのDjangoを学びます。Javaまたはあなたがさらされてから逃げるが、少なくともMVC .NET以前の悪意に注意してください。これらのプラットフォームに対するかろうじて隠された燃えている憎しみの偏見にどれだけの思いを入れたかを批判し、説明できるように十分に学んでください(そうですね、多分私はそこに投影しています)。
そして今、重要なアドバイスをしてください。他の分野での専門知識も多様化しながら専門性を磨き続けると、最終的には、任意の主要都市で2週間未満で年間を通じていつでも新しい仕事を見つけることができる場所になります。少なくとも半分の時間はほとんど興味深い。あなたがこの場所にいるとき、彼らがこれを望んでいると彼らが言うこれらの仕事に我慢しないでください、そして彼らは2日目までに彼らはあなたを長期的な将来に予見できる猶予の望みなしでそれをしています。丁寧に説明してお詫び申し上げますが、実際にはそんなことをしたくなかったので、インタビューで同じように言ったのです。数週間後、@#$ ingはやめて次のステップに進みます。彼らがあなたに立場を誤って伝え、それを認めることを拒否したという事実。
しかし、私を信じてください。新しいギグを見つけることは、深刻なイライラをして5分以上続く時間よりも不幸になるよりも常にずっと良い方法です。しかしもちろん、最初に会費を払わなければなりません。絶対にしない人もいます。だからこそ、彼らは自分たちが最もよく知っているすべてのものを求めています。そしてもちろん、他の答えは本当に間違っていません。 .NETショップが愚かなことを維持する必要がある場合、.NETを使用することは意味があります。
もちろん、意味をなさないのは、なぜ彼らがRails/JS/UI開発者によって多様化し、MVCアプリのみを実行させるのかということです。しかし、今のところ。それを受け取り、会費を支払う必要があるかもしれません。そして、コメントで述べたように、MVCはそれほど悪くありません。すべてのオプションを与えられた本当に悪い選択ですが、確かに最悪ではありません。それは非常に簡単で、実際に起こっているすべてのものの上に10,000層の抽象化をスローしません。また、クライアント側でひねられて、誰かが気になる可能性がある場合は、MSエンジニアの名前を呪うことはありません。それらを学ぶために。
まだ行っていない場合は、いつでも好きなときに立ち去ることができる場所に行きましょう。現在好きなことにもっと懐疑的な目を向けることさえあるかもしれません。 Rails私と同じくらい嫌いになるかもしれません。Ruby(もちろん、そのインタプリタ以外))に問題はありません。
C#の知識の欠如についてのインタビューでは、正直に正直だったと思います。そうでなければ、法的な立場からすると非常に不安定な立場にいる可能性があるからです。
優れたプログラマーはプログラミングを知っています。誰もがすべての言語とフレームワークに精通しているわけではありませんが、それらのほとんどの間にはかなりの共通点があります。最近の主流を構成する言語(LISPなど)とは大幅に異なる言語で作業するよう求められている場合を除いて、優れたプログラマーは適応できるはずです。
当然、学習曲線があります。雇用主があなたを雇ったなら、彼らはあなたがそのカーブに妥当な時間内に追従する能力に自信を持っていなければなりません(ここでも、あなたはC#を知らないことに関して正直であったと仮定します)。 C#言語はJavaを多用しています。より一般的には、ほとんどのクラスベースのプログラミング言語は基本的に非常によく似ています(node.jsは、プロトタイプベースの言語であるECMAScriptの上に構築されているため、明らかに他のプログラミングパラダイムに慣れている。
優れたプログラマーは、柔軟であることに加えて、新しいことを学ぶことに熱心でなければなりません。ソフトウェア開発では、一般的に学習するか、無関係になります。
もちろん、雇用主は、C#を知らないと知っていたとしても、途中で会う必要があります。あなたが学びたいという熱意を示すなら、彼らはあなたにそうするための時間と資源を与えなければなりません。あなたを深いところに投げ込むのは不公平であり、不必要にストレスを感じます。あなたは座って上司と穏やかで合理的な話し合いをする必要があります。彼らがC#でそれを望む場合、彼らはあなたがそれに取り組む間、あなたが学習曲線にあることを受け入れる準備ができていなければならず、彼らがあなたに厳しい締め切りを課すのは不公平でしょう。期限が柔軟でなく、戦略的に重要である場合は、期限内に仕事を遂行するためのある程度の余裕ができるように準備する必要があります。彼らがオフィスでより一般的に使用されている言語である必要がある場合は、期限に間に合うように、慣れ親しんだ方法で今すぐ実装するように要求し、次のプロジェクトでC#に再実装することができます。学習課題として、また外部の要件を満たした後、ソフトウェアを内部の要件に準拠させるため。私が言ったように、今日最も一般的に使用されている言語の多くは共通点が多いので、ほとんどが実装の詳細に行き着きます。
C#ショップで作業していることを遅かれ早かれ受け入れる準備ができている必要があるため、C#を身につけておく必要があります。
あなたの状況によっては、なぜ彼らがあなたを雇ったのかを知っていると仮定することは危険であり、さらにあなたのマネージャーがあなたのスキルを持つ人々を雇うことは良い考えであると知っていると同意することはさらに危険です。
上記のアドバイスを参考にして、C#ではなくJRubyを使用する必要があるビジネスケースを作成します。おそらく、あなたの議論とタイムラインは、古い方法からの脱却が意味をなすことを意味します。私は、それが大丈夫かどうかを単に仮定するのではなく、マネージャーに与えるか、事実を導き、彼らに決定を任せます。それは、彼らが高額の支払いを受けているものであり、それに少しのCYAです。
私の正直な意見では、優れた開発者と優れた開発者を区別するものの1つは、新しいテクノロジーに適応する能力です。私たちは、今日のトップテクノロジーが明日陳腐化する、急速に変化する世界に住んでいます。したがって、適応したくない開発者は、会社の使用が制限されます。これは、良い人を見つけることと採用することが本当に本当に難しいことであり、会社が彼らの宝石を見つけたとき、彼らは長期的に計画しているという少しの事実ではないにしても、結構です。
テクノロジーの範囲外で採用する企業を見たことがありますが、同じ理由で採用しています。彼らは、たとえそれが彼らが新しいテクノロジーに適応するのを待つことを意味するとしても、素晴らしい開発者と手を取りたいと思っています。
今あなたの状況に。グループの新しい人として、私は自分の言うことに細心の注意を払い、上司には言わないでください。確かに、まだ新しい環境に適応しているという前提に基づいて、多くの問題を回避できます。ただし、優先テクノロジーで権威と頑固な忍耐力を損なうと、上司はあなたを雇ったのは間違いであり、快適ゾーンを離れる気がないと考えるだけです。
何を選ぶかはあなた次第ですが、新しいテクノロジーを学ぶことをお勧めします。害はないと私は約束します。
おそらく、.NET環境で誰もがMVCを使用する方法に満足していないかもしれません。 Webフォームのように扱いすぎる可能性があります。これは、手続きのバックグラウンドを持つ誰かがOOPで始まり、すべてを1つの大きなクラスに入れて、いつものようにビジネスを続ける場合も同じです。
この最初のプロジェクトは、これをすぐに実行したいため、理想的な状況ではありません。できる限り.NETでスピードを上げて、機能をできるだけ早く始めてください。物事のやり方が気に入らないので、この要素のリファクタリングを開始し、スキルを別の言語で適用することを覚えておいてください。
うまくいけば、より多くのRubyスタイルでMVC4を使用する方法(他のすべての人が適切に実行していないと想定)が、Webフォームの考え方から離れて、すべての人を引き離すことになります。