プログラマとして苦労しています。アドバイスが必要[終了]


20

私は今何年もの間開発者です。私は自分の仕事にかなり長けており、「仕事を終わらせる」ことができます。

しかし、「仕事をやり遂げる」と「仕事をきちんと行う」には違いがあります。例を使用しましょう。

最近、ウェブサイトをゼロから開発しました。ウェブサイトは正常に動作し、問題はありませんでした。コードを見てみると、もっとうまくやれると思いました。MySQLクエリを削減できたかもしれません。MVCを使用して拡張を容易にすることもできました(現在は拡張する必要があります)。

CodeIgniterを使用してプロジェクトを書き直すことにしました。私はフレームワークが好きです。しかし、MySQLクエリを削減するために高度な結合を学習しなければならなかったため、私は脇道になりました。

そしてこれが問題です。私がきちんと仕事をするたびに、私は絶え間ない学習の輪にいます。また、高度なMySQL参加などのトピックは学習に時間がかかり、実装に時間がかかります。

私は会社に勤めていません。私はすべてを一人でやります。だから、もし私が会社のPHP開発者として働いていたら、SQLを処理する別のチームがあると想像します。

ソロであることは難しいです。そして時々、私の知識は進んでいますが、質問の後に質問をすることがあります。私はおそらく自分の仕事に大きな誇りを持っています。しかし、完全なプロジェクトを処理する会社で働かなければならないとしたら、自分のプライドを満たし、「正しい」ことを確実にするために、より多くのことを学ばなければならないので、プロジェクトに時間がかかると想像できます。

私は新しい年の後に仕事に就く予定です。仕事のセキュリティが必要です。それが、私がこの質問をしている理由です。

自己啓発と自己改善に関して、どのようなアドバイスができますか?心配する必要はありませんか?または、SQLクエリを直接処理しない場合、PHP開発者としての仕事を探していますか?


54
あなたは常にあなたが間違ったフィールドにある学習させたくない場合

6
@JamesGuvnaJeffery:彼らがプロジェクト中の学習に(まったく)時間を(まったく)許可しない場合、開発者として自分自身の改善をやめるので、そこで働きたくありません。
マルジャンヴェネマ

3
仕事は学習であり、彼らはあなたに勉強のためにこの魔法の時間を与えません、実際には彼らはします、それは「あなたの個人的な時間」と呼ばれます。彼らはそれを理由もなく「実地訓練」とは呼ばない。私が言ったように、あなたが自己開始学習者であり、無料で常に学習することに不安があるなら、あなたはおそらく間違った分野にいるでしょう。

5
古いコードは吸うはずです。それで自分を殺さないでください。時間の経過とともに改善するようにしてください。作業中のプロジェクトを書き直すことは、ほとんど実用的ではありません。クライアントは追加料金を支払いません。codinghorror.com/blog/2006/10/...
仕事

2
私が言っていることはわかりません。会社で働くことは、あなたがやりたいことを支持していることとまったく逆です。他の誰かのスケジュールに取り組んでおり、彼らが口述するものと口述する方法を妥協以外に何もせずに使用し、自分の時間に新しいことを勉強する時間も、個人的な時間で学ぶ新しいエキサイティングなことを実装する時間もありません。これが企業のソフトウェア開発者であるという現実です。あなたが慣れ親しんだ実験的研究開発スタイルに賛同していると言うのと同じくらい、あなたが企業環境に専念しているとは思いません。

回答:


33

アドバイス:新しいことを学ぶことを恐れないでください-あなたはあなたがより良くできることを認めて良い第一歩を踏み出し、それからあなたがより良くできる方法を学ぶ努力をしました。はい、前もって時間がかかりますが、長期的に見れば見返りは価値があります。CodeIgniterを知ったので、次の将来のプロジェクトに使用できます。あなたは履歴書にそれを置くことができます。高度なSQLテクニックを理解したので、将来のプロジェクトメリットがあります。学習を停止すると、停滞します。


21

あなたが経験していることは私にとって非常に普通のことです。これが私たちのクラフトでの仕事であり、私たちがやっていることでどんどん良くなります。


10

... CodeIgniterを使用してプロジェクトを書き直すことにしました。私はフレームワークが好きです。しかし、MySQLクエリを削減するために高度な結合を学ばなければならなかったため、私は脇道に追い込まれました。

そしてこれが問題です。私がきちんと仕事をするたびに、私は絶え間ない学習の輪にいます。また、高度なMySQL参加などのトピックを学習するには時間がかかり、実装には時間がかかります...

上に挙げたように、前もって計画を立て、作業キューを確立して優先順位を付け、時間を管理する能力の向上に集中するのは理にかなっていると思います。

本当に、これはあなたの態度に欠けている唯一のもののようです。あなたが「サイドトラッキング」と呼ぶものは、本質的に別の作業(「高度な結合の学習」)であり、計画し、優先順位を付け、キューに入れる必要があります。


ありがとう@gnat。これらの肯定的な反応に本当に感謝しています。私はあなたの言ったことについてあなたに反抗的に同意することができます。
ジェームズグブナジェフリー

9

この分野の専門家であるということは、自分の不十分さに対して絶えず自分自身を打ち砕くことです。月曜日から金曜日までの8〜5日間、締め切りが近づいたら多分もっと多くのことをして、素敵な週末を過ごし、月曜日に戻ってきてください。それが仕事です。

ソフトウェアを作成するには、ある程度の謙虚さが必要です。あなたが正しくなければならない誰かであり、彼らがすでにすべてを知っていることを証明しなければならない人なら、これはあなたのためのフィールドではないかもしれません。

私は毎日何かを学んでいないことを推測することはできません。私はその仕事が欲しいとは思わない。


私の経験では、胃の不調もできる限り、正しい人でなければならないということです。完璧ではないあらゆる小さなことを自分で蹴ります。それが時間の経過とともに私が物事をより良くする理由です。
トムアンダーソン

まあ、それは矛盾ですよね?Hubrisは、プログラマーの3つの美徳の1つです。しかし、私の経験では、「学習する前にすべてをすでに知っていることを示すことで、自分がスマートであることを証明するために強引に駆り立てられる」ことは、新人開発者が手放すか、この分野で長続きしない傾向です。
ダン・レイ

手放すのではなく、スロットルバックするのでしょうか?幸いなことに、私は自分が知らなかったことを知っていると宣言する習慣から抜け出しました。しかし、私はまだ物事を知らないことを認めることが嫌いです。私が知っていることと、私が知っていると言いたいこととの間のギャップを埋める必要性は、私にとって非常に大きな原動力です。必ずしも全員のためではありません!
トムアンダーソン

わかりません、トム。恥ずかしさの瞬間のように思えますが、あなたは何かをまだ知らないということは、それを学ぶことに費やすことができる瞬間です。私は次の人と同じくらい知りたいのですが、「わからない」と言ってもまったく問題ありません。
ダン・レイ

6

ソロであること難しいです。対照的に、開発者のチームと作業しているとき、誰もが互いに学び合っています。チームの一員として、他の開発者と協力して多くの知識を習得し、自分ですべてを理解しようとするときよりもはるかに少ない労力で学習します。

とはいえ、開発者として、あなたは常に学習に専念しなければなりません。新しいフレームワークのドキュメントを読む場合でも、開発に関する本を読む場合でも、知識を最新の状態に保ち、成長させるために絶えず努力する必要があります。ただし、チームの一員になると、特定の時点で最も学習する必要がある分野を明確にすることができます。

古いコードを再検討し、書き直すことについてのあなたのポイントについて:私は自分のコードが常に私がそれを書いた時に知っていたものの中で最高のものを表すことがわかりました。何年も前に書いたものに何度も戻って、額に自分自身を平手打ちします。しかし、それは経験の性質です。必要なときに手に入れます...

最後に、アプリケーションを開発しているときは、常に優れたビジネスセンスを発揮して、コーナーを切ってより速く仕上げるのが最適な時期を決定し、デザインと品質を改善する新しいことを学ぶのにもっと時間をかける必要がある時期を決定する必要がありますアプリケーションの。ソフトウェアの世界には、学ぶべきことがたくさんあります。そのような適切な判断を行使しなければ、車輪を回転させながら学習、思考、再設計を行うことができますが、何もすることはありません。


2番目の文の+1。読書(書籍またはオンライン)で学んだことよりも多くの異なる組織で働いている同僚から多くを学びました。しばらくチームで働くことはあなたに良い世界をもたらすだろうという質問から聞こえます。
ダウッドは、モニカを

3

あなたの懸念は有効だと思いますが、それ以上の睡眠を失うべきではありません。技術者であることには、次の荷物が付いてくると思います。

  • 常に新しいことを学ぶ必要があります。あなたはこれを愛することを学ぶか、そうではありません。
  • あなたがマスターしたいと思うものは、おそらく誰もが知ることができるよりもはるかに多くあります。
  • プロジェクト中にあなたが望むスキルを開発します。
  • その結果、常に戻ってそのプロジェクトをやり直したくなるでしょう。あなたがより良いかもしれないと知っている何かをリリースするのはとても難しいです。

最後に、それはあなたが聞こえる気にあなたがすることができないというものです品質のソフトウェア、構築について学ぶに。高品質のソリューションを構築することと、完璧なものを構築することを区別する必要があることを理解してください。あなたは私のようで、完璧だとは決して思わないでしょう。自分自身と自分の仕事を改善する機会が得られなかったと感じたら、もっと心配になるでしょう。

すべての取引のジャッキーになるのは難しい(なしのマスター)が、あなたにとって最も興味深く有用なものを特定する方法を見つけ出し、それらに集中する必要がある。他の作業を他の人やツールに「アウトソーシング」するのに最適な方法を見つけます


2

「適切に実行する」ことについて心配する必要はないと思います。完璧を目指して努力しますが、完璧なソリューションを設計することは実際には不可能であり、さらに最初の段階では不可能であることを認識してください。この質問をするのに適切に行われることを十分に心配しているという事実は、あなたがすでに正しい軌道に乗っていることを意味します。

新しいことを学ぶことに対する不満について は、グループで作業し、問題を他のプログラマーに尋ねて議論することができるため、私が学ぶ必要があるものを見つける苦痛を取り除き、それを喜びに置き換えました新しい何かを発見し、それを適用する方法を学びます。

私はソフトウェアを書くのが大好きですが、実際に何か新しいことを学ぶのではなく、実際に自分がやりたいことを達成するために学ぶ必要があることを見つけるのに苦労することがあります。

私が理解していることから、私はあなたと同じような立場にありました。何かを単独でコーディングすることは、時にはイライラして困難になることもあれば、やりがいがあり、それ以外の場合はやや楽しくなることもあります。

あなたがやろうとしていることを正確にやり、あなたがチームの一員になる仕事を見つけてください(そして、あなたが吸わない場所に仕事を着陸させるために最善を尽くしてください)。同じ技術を使用し、同じソフトウェアを設計する他の人々と協力することで、ほぼ一晩でそれらの技術と設計パターンの理解と応用が広がります。

初めて何かを正しく行う方法を知ることに関しては、最初に特定の方法を既に実行していない限り、より良い方法があったことをどのように知っていますか?ソフトウェア設計のスキルは、多くの場合、経験に大きく依存しています。Joel Spolskyはソフトウェアの天才ですが、彼の多くの記事を読むと、それらは経験と知性の両方の結果であることがわかります。

SQLの部分については、.NET開発者として、専用のデータベース開発者がいる場所ではまだ仕事をしていないので、私たち全員が独自のSQLを書いていますが、SQLが本当に得意な開発者があなたを助けてくれます。より詳細なものがあります。

あなたは賢い人のように聞こえます、私はあなたがあなた自身にそんなに一生懸命であるべきではないと思います。


1

これは完全に正常なことであり、心配する必要はありません。新しいスキルを継続的に学ぶ必要がありますが、時間の優先順位付けと管理についても学ぶ必要があります。また、不必要な再開発のtrapを避ける必要があります。

経験の浅いプログラマーは、しばしば再開発のtrapに引き込まれるでしょう:

私はこのプログラムを完璧に書いたわけではありませんでしたが、今から拡張または変更する必要があります。私が書いた方法のために、既存のコードを変更するのは多くの仕事になるでしょう。それ以来、多くのことを学びました。プログラム全体を書き換えることが最善のことだと確信しています。今回はもっとうまく書けると確信しています。

この論理には多くの問題があります。

  • 既存のコードを変更したり、既存のコードに追加したりするのは大変な作業ですが、すべてを書き直すのは大変作業ではないでしょうか
  • すべてを書き直すと、新しいバグを作成する可能性が高くなります(特に経験の浅い場合)。システムの作成に関係するすべてを検討していますか?(初めてかかった時間を思い出してください)
  • プログラムを最初に作成してから多くのことを学びました(そのため、プログラムを改善できる可能性があります)が、来月/年にはさらに学ぶこともできます。何があなたはすべてを書き換えたくないだろうと思わせる、再び将来のある時点で?
  • プログラムの究極のテストは、それが機能することです。もっといいことはありませんか?

再開発を考えて計画することは決して害になりません。つまり、プログラムをどのように書き直したいかを検討し、発生する問題を特定しようとします。この場合、現在必要な「高度なSQL結合」を特定し、それらがどのように機能するかを調査し、それらについて学習します。

計画を通じて(開発を開始せずに)高度な結合知識のギャップを特定できなかったと思われる場合は、計画スキルを向上させる必要があります。計画のどの部分が十分に詳細ではなかったかを考えてみてください。システム全体が技術的に可能であることが確実になるまで、必要なだけ詳細に進む必要があります。

このアプローチにより、事前に学習することができます。

最後に、仕事で学ぶことはプログラミングの通常の部分です。ただし、これは、タスクを開始してから、たとえば基本的なHTMLについて学ぶために1週間停止する必要があることに気付くという意味ではありません。数時間立ち止まって何かを学ぶことができますが、雇用主は仕事を成し遂げるためだけにあなたにお金を払っています。効率的に学習します-導入部と歴史を読むのではなく、それがどのように機能し、プログラムにどのように適合するかだけを読んでください。プログラムの一部を完了する方法を学ぶために何日も仕事を止めなければならない場合、あなたはそれを間違っています。


1

新しい技術や問題を学ぶことは時間の流れだと思うかもしれません。しかし、パニックにならないでください。正常です。学ぶことはプログラマとしてのあなたの練習の一部です...それ以外の場合は、すべてCOBOLにこだわるでしょう。

フリーランスの専門家はそれに応じてコミッションを調整します。また、学習期間は他の多くのことの中でも特にあなたの時間の見積もりに考慮すべきものです。次回、新しいフレームワークを導入することにした場合は、十分な時間をおいてそれを学習するように計画してください。


0

しかし、「仕事をやり遂げる」と「仕事をきちんと行う」には違いがあります。

いいえ、ありません。ここがあなたの問題の根源だと思います。個々の開発者として、他の人がどのように動作するかを見ないので、あなたは物事を「正しく」行うことについて心配することにあまりにもこだわっているように思えます。しかし、誰に応じて正しく?あなたがしていることを「正しい」と宣言するこの魔法の人は誰ですか?世界最高のプログラマー100人を採用してください。すべてのプログラミングトピックについて2人が100%に同意することはありません。

最終的に重要なのは、顧客が満足しているかどうかです。作成するプログラムが想定されている問題を解決し、費用対効果の高い方法で実行している場合は、正しく実行しています。たとえば、独自のフレームワークを使用するよりもcodeigniterを使用する方が本質的に正しいわけではありません。その結果として、がらくたの山を作った場合、プロセスや「ベストプラクティス」に関係なく「間違った」ことをしていることになります。

コードを再検討し、コードを改善する方法を見つけることは、開発プロセスの通常の部分です。それは、あなたが物事を「正しく」行っていないというサインではありません。それは、あなたが学習と改善に専念していることを示しています。あなたの投稿で私が見るすべてから、あなたは問題ありません。

さあ、キックしてください* * *


私はこれに同意しません。プログラミングの方法は他の方法よりはるかに保守しやすく、読みやすいものがあります。また、より良いコードを書くことができるようにプログラマーを改善することに専念する本が山ほどあります。
TehShrike

@grandmasterB、ありがとうございます。TehShrike、およびこれらの本への参照?
ジェームズグブナジェフリー

3
すべてのプログラミングトピックで100%に同意する人はいません」-しかし、少なくとも80%がプログラミングトピックの少なくとも80%で同意するでしょう。それがプロのコンセンサスです。絶対的な「権利」はありませんが、ベストプラクティスがあり、知る価値があります。
カークブロードハースト

1
すべては順調ですが、プログラムが問題を解決していない場合、ベストプラクティスであるかどうかに関係なく、正しく実行されていません。プログラムが正しく行われたかどうかを判断する客観的な手段が1つあります。それは、顧客があなたの仕事と引き換えに緑色の紙切れやその他の支払いを渡すかどうかです。他の尺度は単なる意見です。
GrandmasterB

2
そして、クライアントが変更に対する引用が過剰だと感じ、コーディングが不十分だったためにその感情を確認する別の専門家を見つけると、あなたは失業しています。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.