このサイトとSOの多大な助けのおかげで、販売したいソフトウェアのプロトタイプを作成することができましたが、残念ながらプロトタイプは機能しますが、コードの品質は非常に低いと思います。 OOPやデザインパターンをあまり使わなかったので、私のコードは理解できますが、通常の開発者はそれを読まなければならないので気絶すると思います。
そこで、開発者を雇って、品質をもう少し向上させ、正しく実行できなかった可能性のあるAPIの実装の一部を改善したいと思いました。開発者を雇うのに問題があります。
私は2人の開発者に会い、彼らに私のソフトウェア仕様を読んでもらいました。問題は、彼らが私のビジネスのドメイン知識(完全に理解でき、大したことはありません)を欠いているだけでなく、Hadoop、Hbaseなどの基盤となる技術システムの知識も欠いていることです。 Cudaなど。私が使用したmap/reduce、bigtables、その他のテクノロジーについて説明するのに多くの時間を費やしました。このサイトの人たちとの交流のおかげで常識だと思いましたが、出会った人たちは、こういうことをする必要がないので知らなかったと言っていました。
私の質問は、請負業者の開発者を雇っているソフトウェアプロジェクトの場合、開発者が基盤となるテクノロジーの経験がない場合、それは危険ですか?それとも、別の分野で活躍している一般的な開発者は、現実的に新しいテクノロジーを手に入れることができますか?私はエンベロープ計算の非常に迅速なバックを行いました。私が何時間も働くテクノロジーの経験のない学生または開発者を雇う場合と、2倍の料金で半分終了する非常に経験豊富な開発者を雇う場合の先行費用は同じだと思います時間ですが、他にどのようなリスクを考慮または心配する必要がありますか?また、私がゼネコンを雇う場合、彼らが請負業者である場合、hadoopまたはcudaを学ぶのにかかる時間の支払いをする必要があります(ビジネスには意味があるようですが、彼らが使用しない場合、彼らにとってどれほど公平かはわかりません再びスキル)。
私は少し混乱しているので、どんな提案も素晴らしいでしょう。
開発者が基盤となるテクノロジーの経験がない場合、それは危険ですか?
はい。 (学習には時間がかかり、間違いを犯すことはしばしばプロセスの一部です。)
それとも、別の分野で活躍している一般的な開発者は、現実的に新しいテクノロジーを手に入れることができますか?
はい。 (新しいテクノロジーを採用することは、ジェネラリストが常に行うことです。新しいことを学ぶことができなければ、プログラマーとして長くは続かないでしょう。)
私のテクノロジーに経験がなく、何時間も働く学生または開発者を雇う場合と、2倍の料金で半分の時間で終了する経験豊富な開発者を雇う場合の先行費用は同じだと思います
「テクノロジーXの経験がない」と「経験がない、期間」には大きな違いがあることに注意してください。新しいフレームワークや言語を学ぶ必要があることと、開発者としての最初の仕事を開始し、正しい方向を示す経験のある人がいないことはまったく別のことです。
他にどのようなリスクを考慮または心配する必要がありますか?
設計および開発プロセス中に行われる決定は、後で変更するのが困難および/または費用がかかる可能性があります。賢く経験豊富な開発者は、開発時間だけでなく、はるかに多くの時間を節約できます。一方、自分の仕事が本当に得意な人は、それに応じて請求することができます。
私は少し混乱しているので、どんな提案も素晴らしいでしょう。
おそらく、ジョエル・スポルスキーの記事が役立つでしょう: インタビューのゲリラガイド 。一言で言えば、ジョエルは2つのことを探していると言います:1)賢い、2)物事を成し遂げる。それを超えて、あなたが一緒に働くことができ、あなたが達成しようとしていることを理解し、あなたと一緒にそれに向けて取り組むことができる誰かを探すことをお勧めします。
初心者が2倍の時間で半分の価格でまったく同じことをすることができれば、それはすべてうまくいくと思います。現実的には、初心者が解決できない問題や避けられない落とし穴があります。同様のコードは得られないと思います。あなたはあなたの期待を下げることになるでしょう。
これは、設計に関してはより当てはまる可能性があります。経験豊富な開発者が設計に取り組むための追加料金を支払います。費用対効果が高いと思われる場合は、初心者を使用してコーディングボリュームを支援できます。
はい。両方。
理想的には、足を上げる必要がある人を真ん中に見つけることができますが、技術的知識またはドメイン知識のいずれかでそれらを実行する人はいないでしょう。ただし、多くの力が、解決しようとしている人員配置の問題に影響を与えます。
ドメインスキルが不足している理由
開発者は巡回グループであり、市場の要求に応じてアプリケーションドメインからアプリケーションドメインに移動します。何かが熱くなっている場合、競争が市場の一握りを除くすべてのプレーヤーを駆り立てるまで、10社、あるいは多分100社、さらには1000社がそれを追いかけます。その結果、開発者がビジネスドメインの知識の事前採用に深く入り込むインセンティブはZipです。かなり斬新なことをしている場合、ドメインの知識を持つ他の人を見つけることはできません。競合他社、特に元競合他社がいる場合は、ドメインエクスペリエンスの探求をあきらめる必要はありません。
あなたがホットショット開発者を雇う場合、彼らはポータブルスキルの開発に最も興味があるかもしれません、それであなたはまだドメイン知識のために多くの重みを運ぶことを余儀なくされるかもしれません。おそらく、開発者が使用できるように、システムエンジニアに機能関連のドメイン知識を文書化してもらうことを検討する必要があります。おそらく賢いことと物事を成し遂げることの間で、あなたは物事を成し遂げることに強い誰かを選ぶでしょう。しばらくの間一緒にいることに興味があり、ビジネスとテクノロジーの両方を学び、会社のニーズを自社のニーズとほぼ同等にする開発者を見つけることができる場合、それは計画が関係する賢い人よりも長期的かもしれません登って、かなり頻繁に出て行きます。
需要の高いスキル
需要の高いことをしている場合は、候補者を引き付けるためにもっと多くのことをしなければなりません。認知度が低く、見返りとして提供しなければならないものが競合他社よりも劣っている場合は、多額の費用を支払うか、他のスキルを持つ候補者のプールから必要な才能を伸ばす必要があります。
ドメインスキルまたはテクノロジースキル?
質問では、Hadoop、Hbase、Cuda、map/reduce、bigtablesなど、候補者に欠けているいくつかのスキルについて言及しています。これらのドメインスキルは、顧客に固有の業界である製品を作成するための詳細ではなく、テクノロジーに基づいているため、私がこれらのドメインスキルと呼ぶかどうかはわかりません。これらのスキルはそれぞれ移植可能であり、特定の業界が自動化され、支配したり、ニッチを見つけたり、他の何かに移行したりした後でも、価値があると思います。
技術スキルの成長は優れた候補者を引き付ける
テクノロジースキルの採用とトレーニングの利点は、賢く、物事を成し遂げる、積極的でキャリア志向の開発者が、自分自身をトレーニングすることで、長くやりがいのある将来を備えた何かを学ぶ機会に飛びつくことです。課題と管理しやすい新しいテクノロジーミックスを維持している場合、必要な開発者の多くは、短期的および長期的な相互利益のためにチームの1つであることを受け入れます。
開発者が基盤となるテクノロジーの経験がない場合、それは危険ですか?それとも、別の分野で活躍している一般的な開発者は、現実的に新しいテクノロジーを手に入れることができますか?
開発者はテクノロジーを手に入れることができますが(最終的にはそうなるでしょう)、それがあなたの要件を満たしているとは思いません。
あなたは動作しているソフトウェアを持っていますが、それをレビューし、リファクタリングし、そしておそらく書き直したいと思っています。それを行うには、専門家または少なくともいくつかのテクノロジーの経験がある人が本当に必要です。ソフトウェアパターンなどはありますが、プラットフォームとフレームワークの独自性により、実装はプラットフォームとフレームワークによって異なります。
ビジネス上の問題を解決し、ドメインをマスターし、ソフトウェアを実装しました。これで、アプリケーションを拡張して長く健康的な生活を送ることができるようにするための技術的なガイダンスが得られました。同様のシステムで、または同様のテクノロジーを使用してこれを実行した人が必要です。
プラットフォームが異なれば、必要な考え方や経験もまったく異なります。あなたはビッグデータ/並列コンピューティングタイプのプロジェクトに取り組んでいると思いますか? Web開発者または統合開発者は、プロトタイプを書き直して機能させることができるはずですが、なぜ彼らがあなたより優れていると思いますか?
彼らは存在しないかもしれないので、完璧な人を我慢しないでください、しかしあなたの開発者はあなたが使っている技術と概念の少なくともいくつかに精通しているべきです、あるいは彼らが求人広告で言うようにデモンストレーション新しいテクノロジーと概念をすばやく学習する機能。 HadoopやMapReduceのことを聞いたことがない場合は、目覚まし時計が鳴っているはずです。
あなたは本当にコードレビューやトレーニングを求めています。特にコードレビューの場合は、さまざまな背景を持つ熟練したプログラマーのグループが最適です。彼ら全員が同意したら、彼らがあなたに言うことをしなさい。彼ら全員が異なる意見を持っているとき、あなたはちょうど正しいことをしている。 :-)
MapReduce、CUDA、およびHadoopを使用していて、1人のレビュー担当者が必要な場合は、専門家を雇ってください。私の最初の選択は、学校に加えて経験のある人を探すことです。また、自分でトレーニングしたり、ユーザーグループに参加したりすることも検討してください。そのような友達がいる場合は、いくつかの重要な個別の質問をして友達に見せることもできます。
Programmers.StackExchangeは人々に批評のためのコードを投稿させますか?もしそうなら、私はページだけを選ぶでしょう。間違っていることがわかっているものを選んでください。しかし、その理由はわかりません。
どのプログラミング言語を使用していますか?
私は、Hadoop/MapReduceが何であるかについて完全に精通していないことを、開発者が最新の状態に保つ試みを行っていない可能性があることを警告する兆候と見なします。
とはいえ、それは単なる兆候であり、雇わないということではありません。彼らにFizzBuzzまたはそのような性質のものを与え、彼らがそれを過ぎてあなたのコードを見せて批評を求めたら。おそらく、意図的にバグのあるものを選択するだけでなく、その議論がより興味深いものになるので、大丈夫だと思うものも選択してください。
これについてアドバイスするのは難しい。いくつかの考えだけ:
自分のテクノロジーの経験がなく、何時間も働く学生や開発者を雇う場合と、2倍の料金で半分の時間で終了する経験豊富な開発者を雇う場合と、初期費用は同じになると思いますが、他にどのようなリスクを考慮する必要がありますか?心配?
イントロダクションに書いたものを作成します。
my code quality is very low
I didn't use much OOP
I wanted to hire a developer to make it a bit more better quality and improve some of my implementations
これに答えることはno-brainerである必要があります:
経験なしの開発者を雇った場合、非常にありそうもないであり、コード品質を向上できます。経験のないプログラマーはヘルプなしです。
shortの実行では安いかもしれませんが、noviceを雇うには、later!
他にどのようなリスクを考慮または心配する必要がありますか?
あなたとあなたの製品を稼働させるために、コストだけを計算することを間違えないでください。さらに重要なのは、メンテナンスのコストです。
直接的な結果として、私が前の段落で言ったことの中で、あなたは考慮しなければならない、いわゆる Technical Debt です。あなたが言ったように:コードベースは良い形ではありません-つまり、すでにあります技術的負債。そして、非熟練労働者を雇うことで、あなたはdebtを増やしています。おそらく今から数年後には、コードベースが保守できなくなり、a)から最初からやり直すおよびb)最終的に顧客を失うことになります。これは、どちらの場合も同じです。つまり、お金の損失です。
また、私がゼネコンを雇う場合、彼らが請負業者である場合、hadoopまたはcudaを学ぶのにかかる時間の支払いをする必要があります(ビジネスには意味があるようですが、彼らが使用しない場合、彼らにとってどれほど公平かはわかりません再びスキル)。
明らかに:はい!これをしない理由は何もない。彼らは知識を必要とします、あなたは彼らがそれを持っている必要があります-そう:はい。
彼らがgood開発者である場合、彼らは新しいテクノロジー、または少なくとも彼らにとっては新しいテクノロジーを簡単に理解できるはずです。仕事を真剣に受け止めれば、テクノロジーを持っている可能性が高くなりますレーダー上つまり、実際にはテクノロジーで生産的なことは何もしていませんが、方法 =およびwhen-使用します。
私はHadoopの知識がないことを認めなければなりませんが、それが良い解決策であり、それがどのように機能するかについて公正な理解を持っている場合は知っています理論上;ですから、私が生産的になるのにそれほど時間はかからないはずです。
私は2人の開発者に会い、彼らに私のソフトウェア仕様を読んでもらいました。問題は、彼らが私のビジネスのドメイン知識(完全に理解でき、大したことはありません)を欠いているだけでなく、Hadoop、Hbaseなどの基盤となる技術システムの知識も欠いていることです。 Cudaなど。私が使用したmap/reduce、bigtables、その他のテクノロジーについて説明するのに多くの時間を費やしました。
あなたが最もよく知っているので、あなたのbusinessを説明することはあなたにとって最も簡単な部分であるべきです。誰もがあなたのビジネスをあなたと同じくらいよく知っているとか、まったく知っているとは期待できません。
同じことがテクノロジーにも当てはまります。
そこには膨大な数のフレームワーク、言語、ツールキットがあります-それらをすべて知っている開発者を見つけることはほとんどありません
もちろん、次のように言うこともできます。$ Technology_du_jourはメディアで宣伝されているため、すべての開発者が実用的な知識を持っていることを期待しています。しかし、それは現実ではありません。
開発者としての私にとって、私の仕事はトレードオフです。私はいくつかの言語といくつかの技術の実用的な知識を持っています。これは私を多くの点で柔軟にします。必要に応じて、現在のツールを深く理解することができますが、季節が進むにつれて、ツールと言語も同様になります。
tl; dr;
1)可能であれば、ドメインと目的のテクノロジーの専門家を雇う
2)できない場合は、
2a)プロジェクトで使用されているテクノロジーの知識がある場合とない場合があるプロジェクトの専門知識のジェネラリストを探します
3)reallyがある場合really他に誰もいない:学生を雇う。
あなたには技術的負債があります、それを増やさないでください!