web-dev-qa-db-ja.com

職人技は報われますか?

重複の可能性:
初期段階でのプロトタイピングとクリーンコード
率直に言って、カウボーイコーディングを好みますか?

多くの企業で働いた後、私は高品質で十分にテストされたソフトウェアを書くことへの私の取り組みが必ずしもキャリアの進歩につながるとは限らないことに気づき始めました。技術的な負債の山を抱えている一方で、高い生産性に似ている開発者を好みます。

それは本質的にやりがいがあるので、よく書かれたコードに固執する傾向があると言いました。

一部では、クリーンなコードを記述しながらさまざまなテクノロジーとアプローチを採用することで、生産性のギャップを埋めることができます-ソリューションには、動的言語、ポリグロットプログラミング、および構成に関する規約が含まれます。

しかし、私のジレンマは残ります-職人技は報われますか?

137
murungu

私の経験では、答えは悲しいことにノーです。ずさんなハックよりも職人技の文化をプッシュしたい、オブジェクト指向として書かれた手続き型コードよりもデザインパターンを作りたい、古いレガシーテクノロジーにとどまらずに新しいテクノロジーを採用したいなどの理由で、多くの職を失いました。私は後悔これらの選択をしないことに注意してください。しかし、実際には、私たちの開発者の兄弟のほとんどが、職人技を知っていない、または気にしていません。ソフトウェアを書く「正しい」方法をあまり気にしない、あるいは彼らが何年にもわたって行ってきた方法よりも優れた方法があることをまったく知らないという人はもっとたくさんいると思います。もちろん、私は職人技を念頭に置いて自分のコードを作成しようとしますが、それはほとんど無駄な努力であり、多くの場合、少しでも追加しようとする職人技に従わないコードがある場合は苦痛です。私が残した仕事でさえ、私は新しいことに取り組むのではなく、マイナーなバグ修正に追いやられました(新しい開発に割り当てられたので、「根本的なアイデア」、つまり職人の技を紹介しようとします)。最終的にうんざり/退屈して、職人技を理解する会社を見つけることを期待して別の会社を探します。

私は、環境に慣れている人々を見て、羨ましいですではないソフトウェアの職人技、またはSOLID原則、またはORMS /について知っている唯一の人) IoC/SOC/etc、彼らが人々にノーと伝えるために困難な戦いをする必要がないため、VB6モジュールである可能性がある1つの巨大なクラスにすべての関数をまとめることは悪いことです;コードファイルを持つことは悪いことですこれには、数千行続くメソッドがあります。すべてのロジックをボタンのイベントハンドラーに配置するのはよくありません。新しいより良い方法についてチームを教育し続けるので、解雇されるリスクを負う必要はありません。物事を行う;コードベースの寿命と保守性を向上させる方法、あなたはonlyを知っている人であるため、混乱した見た目または解任に遭遇する理由それは良いことです、またはあなたが技術的なブログ/ポッドキャストを購読して自分を向上させる唯一の人です。

ソフトウェア開発者として働く6年間で、私は実際に職人技を重視する6社ほどの会社のうち1つだけの仕事をしました。他のすべての場所は利点を知りませんでしたし、理解さえしていませんでした。チームの他の人に物事を説明しようとすると、この奇妙な「Wha ...?」まるで彼らが私が言っていることを何も理解していないかのように見える。企業は、何も改善しなかった怠惰な開発者を維持し、新しいものを渡すことにも気づくことを拒否したほうがいいでしょう。長期的なメンテナンスを容易にする適切な開発手法を奨励する代わりに、彼らはすべてを犠牲にしても構わないと思っています。短期の用語。毎回。

要約すると:職人技は、チーム全体がそれを採用する場合にのみ報われます。一人が職人技を取り入れ、他の人がそれが何を伴うかを知らない場合、それはまったく報われず、おそらくあなたを傷つけるでしょう。

[〜#〜]補遺[〜#〜]

私のポイントを証明するために、私は2011年6月にこれを書きました。ここに述べられた理由のために、私は'12年7月に働いていた会社で開発者として手放されました:その13か月間、私は私たちをプッシュしようとしていました維持不可能ながらくたをハッキングするのではなく、職人技の一部を使用することに向けて(たとえば、社内のCRMソフトウェアを他の企業に販売しようとして、社内で70人程度のユーザーをほとんどサポートできず、再起動する必要があった場合)クラッシュのために1日に数回)。 「シニア」の開発者が私の努力のすべての段階で私の努力を妨害し、非技術的なCTOは常に良質が目標であると私に直接言ったにもかかわらず、常に彼の側に立ちました。 my開発スキルは「[私の]強みではない」とCTOとHRに伝えられ、会社は私がプッシュしようとしている方向(つまり、物事のある環境)とは異なる方向に進みたいと考えましたコードレビューやコードの慣習や職人の技など)、そして私のサービスはもはや必要なくなったということです。

別の仕事を見つけるのに5か月近くかかりましたが、その仕事ではSQL以外の開発はまったく行われません。私は一日中プロプライエタリアプリケーションを使用しており、上記のようなシナリオにいつも飽き飽きしているため、開発をやり直したいという私の意欲と願望はほとんどなくなっています。私は最近、2つの就職の面接を行いましたが、その後、その地位については考慮されませんでした(古い「別の候補者と一緒に行った」言い訳)、私は、企業が「彼らのビジョン」には参加しないだろうと感じたためです主に、良いデザインの原則に従い、ソフトウェアの職人の技に忠実になりたいという私の熱意に応えています。

つまり、2年以上前に述べたことを繰り返します。ほとんどの場合、少なくとも私の経験からすると、職人技は、他の誰もそれについて気にしないと、ほとんどの企業が気にしない場合、解雇または失格になります。それ;ほとんどの企業はそれが何であるかさえ知りません。私がORMやSOLIDの原則などのようなもの)のような優れたデザインやことについて言及するたびに、私は自分を撃ったばかりの空白の視線とこの沈む感じに慣れています私にインタビューしている男がこれらのことについて何の手掛かりもないので足は悲しいです、悲しいことに、その沈下感は毎回正しいことが証明されています。

80
Wayne Molina

ここに 考えるべきいくつかの数字 があります:

  • 2000年の調査では、ソフトウェアシステムの総コストの最大90%が保守と進化に費やされていることがわかりました。全体として、ソフトウェアシステムのコストの少なくとも50%がメンテナンスに費やされていることが調査で判明しています。
  • 米国だけでも、年間保守費用は700億ドルに迫っています。

プロジェクトの開始からシステムの寿命に至るまで、優れたエンジニアリングの原則に従うための時間を費やすことにより、これらの数値を削減できます。これは、組織の最終利益に適しています。ここには、将来の開発者向けの効果的な技術文書の作成から、よく書かれたコードやテストの配布まで、多くの側面があります。今は少し時間をかけてより良くすることができますが、将来のメンテナンスフェーズで効果が得られます。

63
Thomas Owens

職人技は報われますか?ありますが、次のレベルに進める必要があります。

あなた自身の会社を始めて、競争に勝る製品を提供してください。次に、あなたはあなた自身の顧客と共にあなたの良い仕事のすべての結果を生み出します。

ほとんどの雇用された仕事で人々は認識のために努力し、それを見つけることはありません。多くの場合、この認識が得られたときにそれが行われますが、かなり後で、その人が次の場所に移動したときです。その後、良い言葉で記憶されますが、効果的には死後です。

31
user8685

私の経験では、ほとんどのプログラマーが「クラフトマンシップ」について話すとき、彼らは通常、将来の機能を処理するために事前に設計された過剰設計のコードを意味します。 「十分に良い」という概念は、しばしば低品質と混同され、「職人の技」の反対と見なされます。

それどころか、最も巧妙に作成されたプログラムは単純で直接的なものであり、想定されていることを実行するのにかろうじて十分なコードを含み、ずさんなプログラムよりも簡単で高速に記述およびテストできます。それは巧妙なトリックと未来のための計画であり、職人の時間がかかり、ずさんなプログラマーよりも遅くなるのです。

28
Dave

これが私のチームがかつて持っていた選択です。私が働いていた会社は年間1,000万を超えました。私が加わった部門は月50万を失っていました。ビジネスはボスの家のセキュリティによって賄われていました。

選択1.ベストプラクティス。全部.....所有者を破産させたでしょう。

選択2. 10週間の主要な見本市。 8人の開発者、戦争モード。デザインもドキュメントもテストもありません。所有者は3年後に売却し、個人の銀行口座に5,000万を投入しました。部門は2億を超えます。 (それはなんとエキサイティングな乗り物でしたか)

コードはsoftware標準であり、率直に言って、がらくたで、文書化されておらず、保守も不可能で、読めませんでした。しかし、それは(驚くべきことに私にも)信頼できるものでした。 business標準では、コードは非難の域を超えていました。

私のこれまでのキャリアのハイライトは、「バケツにたくさんのお金を稼ぐ、くだらないコードを書いて、それを誇りに思っています。私が支払ったことを正確に行ったからです」。

(私はここで少し悪魔の擁護者を演じています):
あまりにも多くのソフトウェア開発者が、誰が請求書を支払うのか、彼らが何をするために支払われているのかを忘れ、過剰なエンジニアへの言い訳として「職人技」と「ベストプラクティス」を使用します。

私が見たBPのすべての支持者は、a)ベンダー、またはb)アカデミックです。公開されたBPに関する会計士の見解をめったに見ないし、資本コスト、時間コスト、機会費用など、BPの利益に織り込まれた完全なコスト分析をめったに見ない。

27
mattnz

職人技は、新製品をすぐに出そうとするのではなく、メンテナンスモードにいるときに報われます。
多くの製品がその段階に到達しないか、メンテナンス契約を結んだ場合、最初にそれを作成した会社とは別の会社に与えられるので、自分の職人の技能を直接享受することはできないかもしれませんが、他の製品は十分かもしれません何年も後の就職の面接で会ったときに、特にひどい構造であなたの名前を覚えて、あなたに対してそれを保持します。

15
jwenting

いくつかの回答には同意し、一部には少し同意しません。メンテナンスに関する数値データへのリンク @ Thomas Owens が大好きです。メンテナンスがどれだけ必要か、少しの職人技で時間とお金を節約できるかという点が、実際に家に帰ります。

一部の人々は、職人の技が後に報われると言いましたが、それは後でのみです。それは間違いなく後で報われます。自分で良いコードを維持して時間とお金を節約するか、そのコードを他の誰かに渡して、コードが表示されるたびに、あいまいでハートの形をした幸せな考えを送り、コードを維持するのがいかに簡単かを確認します。 。

一部の人は、今は効果がないと言っています。私はこの声明に強く反対します。私は変化が急速に起こるいくつかの環境で働いてきました。場合によっては(映画を引用するために)「一口の間であなたを捕まえる」のです。しっかりとしたフレームワーク内に巧みに作成された、読みやすく構造化されたコードがある場合、これらの変更が行われると、処理がはるかに容易になります。私は個人的に、ビジネスが不安定であるか、顧客のニーズが急速に変化するため、プロジェクトのバックボーン構造が適切であれば、要件の変更を緩和するのに役立つことを発見しました。

同様に、私は最近、彼のプロジェクトに十分なバックボーンがなく、保守的に維持できないコードを定期的に書いている同僚との状況を目撃しました。要件が変わったとき、彼は自分の仕事の多くを「公式に戻す」ことを余儀なくされ、最初からやり直す必要がありました。

12
Joel Etherton

簡潔な答え -

大規模な組織では-可能性が高いです。

小規模な組織の場合、または単独で行っている場合(製品またはサービスとして職人の技を提供している場合)-可能性は高いです。

9
amol

職人技は報われますが、かなり後になるまで続きません。

問題は、ほとんどのIT関連組織が若いため、スコープに関係なくソフトウェアが長期間存続することが期待され、実行できるように適切に構築する必要があることを理解するためのtimeをまだ持っていないことです。変更が必要なときに恐ろしい経費なしで適切に。

これは、組織で仕事を見つける必要があることを意味しますこの実現が行われた場所とそれに応じて作業方法が適応されます。そうでない場合、あなたの努力は高く評価されず、非常に不十分です。

7
user1249

ソフトウェアにバグが見つかったとき、あなたは大きな恥を感じますか?

現在のプロジェクトで作業するのではなく、常にバグを修正するために古いプロジェクトに戻りたいですか?

将来の開発者にバグを修正するのではなく、コードを書き直させたいですか?

ほとんどのマネージャーは、良い開発者が誰であるかを時間をかけて見ています。それらの開発者は、より目に見えるプロジェクトを取得する傾向があり、多くの場合、より興味深いプロジェクトも取得します。キャリアアップは、実際に行われた仕事よりも専門能力の開発についての傾向があります。キャリアアップが必要な場合は、証明書を取得し、ビジネスクラスにアクセスして、通常の範囲外のプロジェクトに参加する機会を探します。あなたがあなたの仕事をするとき、あなたは給料で報酬を受けます。あなたがそれを超えたとき、あなたは進歩を見始めます。

6
SoylentGray

それは職人であるという技術ではなく、存在職人であるということです。レオナルドは、油絵で描くのに苦労する価値があるかどうか自問しますか?専門家の大工が、自分が作っている家具のすべての部分を慎重にサンディングする必要があるかどうか自問しますか?

いいえ、私たちは職人であり、それが私たちの仕事です。別の方法で行うことは私たちの性質に反し、「必要最小限の努力」の道を進み始めると、仕事への誇りと継続的な改善への意欲が失われます。

そうは言っても、考慮しなければならない実用的なことはありますが、他の誰かに見せるために恥ずかしいことをしてはいけません。

5
Homde

職人技は報われますか?

はい、しかしそれは皆のために等しく報われるわけではありません。

  • これは、コードベースに対して最終的な責任を負う主要な開発者または開発マネージャーに報われます。
  • コードベースの狭い範囲に変更を加えなければならない開発者にとって、それは報われます。
  • 開発でバグ修正を行う、変更する、または変更する必要がある場合は、ビジネスにメリットがあります。
  • ただし、それはnotを実行します。開発者、マネージャー、またはビジネスは、積極的で不屈の締め切りに間に合わなければなりません。

2つのコメント:

  • 開発者としては、常にコードを変更してサポートするように求められるため、「クラフトマンシップ」のパスを強く支持する必要があります。
  • 次の仕事を選ぶときは、作業環境が「職人の技」の道をサポートしているかどうかを確認してください。
    • そうでない場合は、ハッキーコードから必ず発生する問題を補う必要があります。
1
Jim G.

製品の出荷に携わるソフトウェアエンジニアには、会社への貢献がいくつかあります。

  • あなたがそれらにかかるよりも会社にもっとお金を稼ぐ今年

  • あなたがそれらにかかるよりも会社にもっとお金を稼ぐ来年

コードを速く書くことは、最初に達成する方法です。保守的にコードを書くことは、2番目を達成する方法です。あなたとあなたのビジネス担当者(ビジネス上の関心を表すマネージャーその他の個人)は、何が行われるかを優先するために協力する必要があります。

私の経験はコードが死ぬことは決してないであり、コメントの多いモジュール式のコードを書くことは非常に迅速に成果を上げます。

1
Paul Nathan

一部の企業は、顧客を長年のメンテナンスに夢中にさせて暮らしているため、最低限の要件を満たし、維持に非常に長い時間を要する高速の1.0製品を提供することに関心があります。

さらに、このタイプの吸血鬼は、すべてが正常に機能するときよりも、デモスクリプトとは異なる最初のインタラクションで問題が発生したときにメンテナンスコストを正当化する方が簡単です。

たぶんそれはあなたが結んだ会社のようなものであり、それゆえ企業文化は確かに職人技を奨励していません。

1
wildpeaks

私は、開発者が優れたコードを書くことができるため、保守可能なコードを書くかどうかを選択できると想定します。

締め切りが迫っていますか?

はい-やり遂げましょう。あなたは打ち上げを遅らせる人になりたくありません。

いいえの場合:あなたは利己的または自己中心的な人ですか?

いいえ-良いコードを書いてください、それはそれに接触するすべての人にとって良いことです。

はいの場合:コードレビューが発生する状況にありますか?

はい-次に保守可能なコードを記述します。そうでない場合、同僚や上司があなたの作業について見ているのは、その品質が悪いということです。

いいえ-それはあなた次第ですが、より早く解決策にたどり着くほど、他のことをする必要がある時間が増えます。

いいえの場合あなたがあなたが書いたコードを管理しているのはあなたですか?

はい-貧弱なコードを書きます。次に、それを修正してヒーローのように見える機会を得ます。あなたが一定期間にわたって彼らの生活を楽にし続けるので、人々は幸せになります。あなたが一度にそれをすべて行うと、彼らはあなたを忘れるかもしれません。これにより、ボーナスやプロモーションの可能性が高まります。

いいえの場合メンテナと一緒に作業するか、それとも同じ部署で作業しますか?

はい。おそらく良いコードを書くことをお勧めします。それらはあなたの仕事に対する賞賛の源になるか、最悪の場合沈黙するからです。

いいえ-コードを記述して次に進みます。それがどれほど悪いかは関係ありません、誰かがそれを修正することができます。

1
Matt Ellen

商人がより良い結果をもたらします。最も重要なことは、仕事を終わらせることです。ユーザーは、ユーザーエクスペリエンスに影響を与えない技術的な詳細を気にしません。

コードを書くとき、時々artistが職人よりも優れていることがあります。職人は本で説明されているように自分の仕事をするだけであり、アーティストはただ座って問題の解決策を発明するだけです。

また、「行うべきこと」を実行することは、通常、維持するためにより高い技術スキルを必要とするコードを記述することにも注意してください。会社が「安価な労働力」に基づいて優れた(したがって高価な)プログラマーが優れたコードを書く場合、理解するために基本以上のものを必要としますが、これは最適なソリューションではありません。

0
Danubian Sailor