新しい技術を使用すると生産性が低下しますか?[閉まっている]


20

特定のツールセットの使用経験が増えるにつれて、新しいことを試すインセンティブが弱まるようです。

このプログラミングの仕事を始めたばかりのとき、新しいことを試したり、オンラインで調べたりして、生産性を高めました。コードフレームワークが既に導入されているタスクを簡単にする方法(またはライブラリ)を見つけたからです。そのため、私にとっても、特定のコードベースのコンテキストでも、新しいものを使用することで生産性が向上しました。

今、私はそこに与えられた問題のために、私は、より多くのインスタンスであること、気づい知っているだろうがということであると思われる- -コードを向上させる「そこ」より良い解決策は、それがでしょう見つけます。しかし、コードベースについての私の親密な知識を考えると、コードベースを新しく「より良い」および「改善する」よりも、最適ではないツールを使用してソリューション(テストを含む)を実行する方がはるかに簡単です。

そのため、「きちんとやる」対「きちんと仕事をする」という緊張があります。

これは多くの開発者に起こることですか?これは既知の特定の問題ですか?(結局それは本当の問題なのでしょうか?)それは実際に経験のレベルを上げることに関係していますか?

ああ、そして注意:私はまだ私の仕事が好きで、それを維持するのが好きです。それはただのようです-常に面白いです!-私たちがアプリで直面しているコードベースと問題セットを学ぶにつれて、研究部分は小さくなります。


3
短期:はい-長期:まあ、私たちはすべてCOBOLにこだわる可能性があります
HorusKol

適切に行うことも適切です。
QuanhD

回答:


17

多くの場合、新しいことを試すのは危険です。次の2つのことを行う傾向があるため、時々トラブルに巻き込まれます。

  1. かっこいい/新しい/おしゃれなものの有用性を過大評価してください。クールな例、オンラインで投げられたコードがあります。とてもクールだと思います。とてもかっこいい!XIでは、タスクYを10倍速く実行できます。その明らかに優れています。すべての「未知の未知数」はまだ見ていません。新しいものの営業担当者が省略している問題につまずいたことはありません。地雷が道を待っているのを見るのに十分な専門知識が新しいものにありません。

  2. 既存のツール/フレームワーク/ソフトウェア/ものの有用性を過小評価してください。現在のシステムが最初に構築されたとき、私たちはしばしばそこにいませんでした。微妙なトレードオフが行われたことに感謝しません。既存のシステムで月曜日から朝のクォーターバックを簡単にプレイできますが、機能します。保守性、動作、パフォーマンスの維持という非常に具体的なトレードオフにより、おそらく多くの奇妙な点があります。確かに変だ。おそらく最も重要なことは、チームは現在の奇妙さの専門家であり、その奇妙さを回避する方法を知っていることです。彼らは避けるべき地雷とtrapと落とし穴を知っています。実際、新しいことで遊ぶことに興味があることを行う現在の方法ですべてのいぼを見ているからです。

しかし、新しいことを試して失敗し、保守的になりすぎると、おそらくさらに危険です。慎重に踏み込む必要がありますが、最高のマウストラップを作成する方法がわからない場合、競合他社はもう少し新しいものを試してみようと思います。保守的に行動し、進化しなかった場合、特に競争の激しい市場では避けられない破滅を招く可能性があります。

そのため、現在の物の維持と出荷と、ある程度の遊び心のある教育的な実験と、問題を解決する新しい方法とのバランスをとる必要があります。IMOこれは、多くの企業が20%の時間を新しいもので遊ぶ時間があるという正当な理由です。彼らはうまくいかないことを何度も知っていますが、20%の時間から生まれた多くのアイデアは大ヒットになります。遊ぶ時間も実験する時間もないので、会社として簡単に停滞し、本当に夢中になります。


1
それはあなたが探索している「新しい」タイプに依存すると思います。私は60年代、70年代、80年代のプログラミングの概念を調査しましたが、フィールドの歴史を実際に調べているプログラマーはほとんどいないため、それらはすべて新しいようです。
ルドルフオラー

「研究」についてのもう一つの良い点は、研究したツールを最終的に使用しなくても、そこからいくつかの興味深い概念を選ぶかもしれないということです...今、いくつかの会社があります(私が知っていることを言えば:銀行など)具体的には、「新しいもの」を使用したくないが、これらが適切にインストールされるまで待ちます。時にはそれが賢明です...おそらくプロトタイプ、mootools、scriptaculousなどに多大な投資をした企業があり、それらのフレームワークが戦いを「失い」、あまりサポートされていなかったことを認識しています。
ローランS.

8

それはいつも起こります。私はこれを他の投稿で述べましたが、あなたはエレガントなコードを開発するビジネスではなく、製品を出荷するビジネスをしています。そのため、n破損しておらず、実際に(1日の終わりに)エンドユーザーエクスペリエンスを大幅に向上させないものを修正するために時間を割り当ててくれるマネージャーを見つけるのは難しいでしょう。あなたはn、「おそらくもっと良いものがそこにある」以外に、何が行われているのかを除いて、研究に何時間も割り当てようとする(明確な最終目標なしで)マネージャーを見つけるのに苦労します。

とは言っても、プロファイリングツールなどを使用して発見したアプリケーションにボトルネックがあり、それらを修正することで予想されるユーザーエクスペリエンスの向上を明確に定量化できる場合は、(かなり簡単に)R&Dを行う時間をとるべきです。さまざまなソースから入手できる手法を使用して、それらを最適化するように働きます。


+1、「機能の出荷」は怠zyであることの口実であることが多いと言いますが(テスト、保守性など)
マーティン・バ

私はあなたの答えであなたが言うことの多くに同意しますが、私は開発者が実際にある程度エレガントなコードを開発するビジネスをしていると主張します。出荷されたコードは、それを修正/保守する簡単な方法がなくて機能しない場合、価値がありません。これは、今日n時間を費やして「優雅さ」を得るためにコードをリファクタリングすることで、明日n * 10時間を節約できる場所です。
-hspain

@hspain:私は絶対に同意し、それは理論的には正しい方法ですが、実際の世界(少なくとも、私の経験では)で起こることはありません。
デミアンブレヒト

実際、アジャイルコミュニティの一部の人々は、これらの問題を非機能要件として追跡することを主張しています。要件は「コードは柔軟で変更しやすいものでなければならない」(またはこのようなもの)でしょう。そうすれば、具体的な問題に対処するストーリーを作成できます。利点は、それらが利害関係者に見えるようになり、計画/スケジュールできることです。例
-sleske

@sleske:...そして、優先順位付け中に落ちます;)
デミアンブレヒト

4

いくつかの問題をうまく解決する方法についての経験とより深い知識を持つことに帰着すると思います。

あなたが新しいとき、すべての問題も新しいものであり、あなたはそれらを行う方法を研究する必要があります。しかし、同じタイプの問題を繰り返し解決するにつれて、その解決策が成功することがわかっているため、調査の必要性は低くなります。

次に、新しい問題、または古いものが試行されて真になった(非推奨になった)か、パフォーマンスまたは障害の問題を引き起こしている問題のみを調査する傾向があります。複雑なシステムをより深く理解し始めると、新しい技術が登場するたびに現実的に使用する時間がないことがわかり、多くの場合、新しい技術が存在しないことが経験からわかります。それは誇大広告であり、それが解決したよりも多くの問題を作成します。そのため、問題を解決するために実際にそれらを必要としない場合、新しいツールと技術を使用する傾向が少なくなります。

しかし、あまり傾向がなくても、学習をやめたり、新しいテクニックを決して使用したりする必要はありません。適切なタイミングについては慎重に判断してください。


4

詳細は次のとおりです。

  1. 期限があります。プログラマーは、使用しているツールに必要なすべての詳細を事前に用意しておく必要があります。いくつかのWebサイトを読んで、いくつかの新しいクールなものを見つけて、それを実稼働環境で使用するのは大したことではありません。このツールの経験が足りないだけでなく、さらに重要なことは、何か新しいことを学ぶのに必要な時間がないことです。クールな新しいものが必要な場合は、半年またはそれを使用する前に学んでください。
  2. それを使用する前にそれを正しく知っていることを確認してください:いくつかの素敵な新しいツールは楽しく使用できますが、適切に学習せずにソリューションをグーグルで探して使用するのは非常に悪い場合があります。十分な経験がありません。それを把握するためにグーグルで検索する必要がある場合は、システムの半分が壊れたときにそれを修正するのに十分な知識がないということです。
  3. 最新のものを使用することは適切に行われません。新しいものは技術的に証明されていません。来年、この技術はおそらく完全になくなり、あなたはそれを使用する世界で唯一のものになります。それ以外の人は、それが機能しないことに気づきました。最新の特効薬を避けるには大変な作業が必要ですが、それだけの価値はあります。
  4. あなたのコア知識である技術に焦点を当ててください:すべてのプログラマーは、世界で利用可能なプログラミング知識全体のほんの一部しか知りません。プログラマがそれを使用して十分に快適な部分はさらに小さくなります。実際に機能する部分はさらに小さくなっています。適切に学んだ知識のみを使用し、それが機能することを知っています。これにより、プログラマーが高速になり、コードが改善されます。
  5. 無限に調整しないでください:完璧なコードは良い目標ですが、これは最初にいくつかのがらくたを書いてから、無限に微調整して徐々に改善するという意味ではありません。あなたが持っているすべての良い知識を使用して、初めて完全にそれを書いてください。自分を信頼し。世界を信頼しないでください。あなたがすることとまったく同じことを誰も知らない。彼らの意見は重要ではありません。あなたはプログラマであり、それを機能させる必要があります。世界はあなたのためにそれを行うことはできません。完了したら、停止します。誰かが文句を言うまで触れないでください。
  6. 新しいことを学ぶために時間を使う:誰もが新しいことを継続的に学ぶ必要があります。私たちの未来はそれにかかっています。使用を拒否してください!新しいことを学びますが、実際に機能することが確認できるまで使用しないでください。技術が実証されれば、来年は使用する機会があります。または、他のすべての人と同じように、それを忘れただけです-良いものだけが残ります...
  7. 良いものを失ってはいけません。大きなシステムを正常に構築し、それらのすべての問題を修正し、いくつかの素晴らしいテクニックを学んだ後、あなたができる最悪のことは、単にその知識を捨てて新しいものに取り掛かることです。あなたはすでにそれがどのように機能するか、どんな問題があり、それらの問題を解決する方法を知っています。捨てることは時間の無駄です。
  8. 新しい技術についていく:新しいシステムの1つが成功するでしょう。それは市場で他の何よりも根本的に良いものを持っています。あなたはどれが銀の弾丸であるか分からないだけです。時間内に見つけられなかった場合、知識は古くなってしまいます。古いシステムへのアクセスを削除することで、世の中は良いものをすべて失うことができます。

無限に微調整しないでください。
スリサ

3

ええ、私はそれが起こっていました。通常、新しい手法を習得するのにかかる時間についてリスク分析を行う必要があり、新しい手法が期待どおりに機能しない場合に古い手法を回復して使用できます。私はできる限り新しいテクニックを学びたいと思っていますが、プレッシャーがかかっており、失敗する可能性のある新しいことを試すことに時間を費やす余裕がないとき、私は実証済みの方法に固執します。

一般に、新しい技術を学ぶのに最適な時期は、新しいプロジェクトの開始時だと思います。通常、あまりプレッシャーはありません。うまく機能する新しいものを見つけたら、プロジェクトの残りの部分と簡単に統合して、将来的にはできます。最悪新しいことを試してみて、学習する時間は、大きな展開の前に、必死の数週間です。


3

はい、新しいものは生産性を損ないます

はい、もちろん。最良のシナリオであっても、新しいものはなじみがないため、追加の時間が必要です。多くの場合、時間がかかります。

いいえ、新しい技術は生産性を向上させることができます

ソリューションをより簡単に表現できる新しい手法は、生産性を向上させます。これは、大きなif-elseif条件からディスパッチテーブルに移動するのと同じくらい簡単です。


1

はい、生産性を損なう可能性があります。私の元は退屈なデータ処理の仕事を一度するように頼まれたので、彼女はデータを扱う長いプログラムを書いてそれを実行する方が良いと決めました-それは数秒で問題を解決します。

もちろんそれを書くために彼女に1週間かかりましたが、問題はその後数秒で解決しました。

同じことがあなたの質問にも当てはまると思います。はい、新しいことを学ぶことで生産性を向上させることができますが、タスクに既存の知識を適用し、全体的に迅速に処理する方が良いでしょう。あなたがより短い時間であなた自身のものを書くことができるならば、誰が新しい図書館を見つけて、学ぶことを気にしますか。

忘れないでください、多くの場合、既存のツールで適切に処理することは、新しいものを入れるよりも良い解決策です。コードを非常に面倒にします-長い間レガシーに受け継がれたものの、まだコード内に存在する「新しい」技術のレイヤーが恐ろしいことだと思います。すべてのCOMとすべてのVBとすべての.NETとHTMLをシャベルに入れます)


強くそう思わない:あなたがより短い時間であなた自身のものを書くことができるならば、誰が新しい図書館を見つけて、学ぶことを気にしますか。それは...だけではなく、すべてのことを加えるの古いCの方法を使用することをお勧めして...とすべてのことだろうの仕方があまりにもしやすいと保守的な私見をエラーこと- 。
マーティンBa

@Martin、もちろん逆も当てはまります-だから、多くの人が「常に新しいことを学ぶ」と言っているのを読んでいます。私は仕事を終わらせることが私がやりたいすべてのものよりも優先されるか、最終的に生活を楽にするかもしれないという実用的なアプローチを取ります変化する割合は、新しいものを無視して、さらに新しいものを無視することになります。
gbjbaanb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.