JavaRush /Java Blog /Random-JA /コーヒーブレイク#83。優れたプログラマーを区別する性格特性は何ですか。簡単なプログラミング ガイド: 関数とメソ...

コーヒーブレイク#83。優れたプログラマーを区別する性格特性は何ですか。簡単なプログラミング ガイド: 関数とメソッド

Random-JA グループに公開済み

優れたプログラマーはどのような性格特性で区別されるのでしょうか?

出典: Hackernoon 優れたプログラマーと優れたプログラマーを分けるものは何でしょうか? 私は、優れたプログラマーに共通する 2 つの性格特性を発見しました。それは、一貫性と粘り強さです。これらの特性自体は天才の兆候ではなく、望めば誰でもこれらの特性を開発し、仕事に適用することができます。 コーヒーブレイク#83。 優れたプログラマーを区別する性格特性は何ですか。 簡単なプログラミング ガイド: 関数とメソッド - 1

1. 一貫性を保つ

優秀なプログラマは、たまにはプログラミングをしません。むしろ、彼らは、仕事の前後や週末などの自由時間に知識とスキルを向上させるための具体的なスケジュールを立てています。たとえば、私が知っているプログラマーは、週に 6 日、一日の最初の 2 時間を個人的な学習プロジェクトやタスクに費やしています。これは、そのような人々が 24 時間コードを書いているということではありません。私たち全員と同じように、彼らにも私生活、義務、興味のための時間があります。しかし、彼らは一貫しています。プログラミングが彼らの習慣になっているのです。どうすれば一貫性を保つことができますか? これが私たちの多くが達成しようとしていることです。これを行うにはいくつかの方法があることがわかりました。まず、1 週間にプログラミングに費やすことができる時間を決定します。この数字があなたの毎週の「プログラムマイレージ」です。元長距離ランナーとして、私は毎週一定のマイル数を走りました。これが私の毎週のランニングでした。これで、私のプログラミング経験が得られました。これは、私が毎週プログラミングに費やした時間数です。ほとんどの人はこの段階を無視します。彼らは時間をどうやって見つけるかなど考えずに、完了したいプロジェクトや勉強したいトピックにすぐに飛びつきます。その結果、彼らは夜間、または1日16時間働くことになります。このアプローチには問題があります。長期的には持続可能ではありません。プログラマーとしてのスキルを磨くのは、忙しい 1 ~ 2 週間でできることではありません。その代わりに、長期間にわたって継続的に取り組む必要があります。このため、自分のプログラミング経験を特定することが非常に重要です。これを行うには、タイムログを使用して、どこでどのように時間を費やしたかを確認することを検討してください。紙を用意して、ソーシャルメディアや電子メールを5分間チェックするなど、毎日行うすべてのことと、それを行う時間を書き留めます。これにより、スケジュール内の空きスロットを見つけやすくなります。家事をしたり、テレビを見たりする時間が少し増えるかもしれません。その後、遵守する必要があるプログラミング トレーニング プランを作成できます。トレーニング計画は、一貫性を保つための最も効果的な方法の 1 つです。すべての詳細を事前に配布できます。あなたがしなければならないのは、この計画を毎日実行することだけです。私のランニングトレーニング計画には、毎日何マイル走る必要があるか、どのくらいの速さで走る必要があるかがまとめられていました。今、私は同じ目的を果たすプログラミングワークアウトプランを作成しています。それは、毎日何をする必要があるかを教えてくれます。一日の終わりに、コンピューターで Evernote を開いて、次の日のスケジュールを立てます。以下に例を示します。
6:30 - 8:30 - プログラミング
  1. Python Anki フラッシュカード デッキのレビュー (20 分)。
  2. Word Cloud データの問題を解決します。
私は仕事中ずっとこのプロセスに従います。タスクに費やす時間と、その時間内に達成したいことを指定します。毎月のトレーニング計画も立てます。その中には、来月に達成したいこと、学びたいこと、完了したいことを 3 つ盛り込みます。以前は四半期ごとに計画を立てていました。しかし、その後、3か月であまりにも多くのことが変化する可能性があることに気づきました。月次プランでは、トレーニングを大幅に進めるのに十分な時間を確保できます。

2. 粘り強く行動する

優れたプログラマーの 2 番目の特徴は、粘り強さです。彼らは問題を解決するためのすべての選択肢を検討し、答えを見つけます。これが秘密のようです。私が出会った偉大なプログラマーは、問題を分解し、さまざまな解決策や困難な状況に対する解決策を考え出す驚異的な能力を持っています。つまり、問題を解決するためのシステムがあったのです。私は高校時代に解決策というシステムを持っていませんでした。数学の授業で問題が出されると、すぐに全速力でそれに取り組みました。その後、プログラミングを始めたときもこれを続けました。ノープラン。システムはありません。考える時間はありません。分析はありません。当然のことながら、どちらの場合も、私は不必要にハンドルを回転させ、常に障害物に遭遇していました。現在、私は問題を分解してさまざまな選択肢を見つけるのに役立つ問題解決システムを持っています。たとえば、問題解決プロセスの最初のステップは、問題を述べることです。これが最初です。問題を理解したら、次の各ステップに重点を置きます。
  • 入力データと期待される結果の分析。
  • アクションアルゴリズムの作成。
  • 疑似コードを書く。
  • 問題の簡易版を解決します。
ご理解いただけると幸いです。ステージは簡単ではないかもしれませんが、管理可能です。難しい問題を解決することで、私たちはより良い人間になれます。それは自信にもつながります。難しい問題を 1 つ解決すると、次は新しい問題に取り組む準備が整います。

3. 問題に対する態度は?

より優れたプログラマになるための道において、考慮すべきことがもう 1 つあります。それは、態度です。問題や曖昧さに対して新鮮なアプローチが必要です。ある日、私は上級開発者に、私が行き詰まっている問題についていくつかの質問をしました。私は当惑し、失望しました。開発者も最初は戸惑いました。しかし、彼の答えは私に衝撃を与えました。「わあ、それは素晴らしい問題ですね」と彼は言いました。彼の興味は、発見した詳細によって引き起こされました。とはいえ、優れたプログラマーも何らかの問題に巻き込まれないというわけではありません。彼らは行き詰まってしまいます。しかし、違いは態度にあります。その日私が学んだ教訓は、優れたプログラマーは未知の世界への冒険を恐れないということでした。彼らは、この問題を勉強することで必ず何か新しいことを学べることを理解しています。他のプログラマーを研究することで多くのことを学ぶことができます。しかし、最終的な責任は私たちにあります。私たちは毎日仕事に就き、行動を起こす必要があります。

簡単なプログラミング ガイド: 関数とメソッド

出典: DZone 優れた関数やメソッドとは何でしょうか? これには、それぞれが重要な要素の組み合わせが必要です。最も重要なもののうち 4 つを見てみましょう。 コーヒーブレイク#83。 優れたプログラマーを区別する性格特性は何ですか。 簡単なプログラミング ガイド: 関数とメソッド - 2

意味のある名前

関数には、その目的や機能を説明する名前が必要です。関数に意味のある名前が付いていると、その目的を読んで理解するのが簡単になります。たとえば、関数の目的が ID で顧客を検索することである場合、 findCustomerById(id: String)という名前が適切です。別のオプションとしてfindCustomer(id: String)を使用することもできます。ここで、関数シグネチャは、購入者が ID によって検出されることを意味します。「見つける」という言葉には、買い手が見つかるかもしれないし、見つからないかもしれないという意味も含まれています。関数名がgetCustomer(id: String)に変更されると、ロールバックがないことを意味するため、その意味が変わります。クライアントが見つかるか、関数が失敗して例外がスローされる可能性があります。どちらの名前も関数としては有効な名前ですが、意味が異なるため、実装も異なる必要があります。

パラメータをできるだけ少なくする

私は 3 つのルールに従うのが好きです。これは、関数には 3 つ以下のパラメータが必要であることを意味します。関数に 3 つ以上のパラメーターが必要な場合は、関数を書き換えて、パラメーターをそのクラス、データ クラス、JavaScript オブジェクトなどのデータ ホルダーに配置する必要があります。これは、パラメータの数を減らし、アプリケーション内のデータを整理する簡単な方法です。たとえば、動作は同じだがシグネチャが異なる関数を考えてみましょう。
fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
別のオプションは次のとおりです。
data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

関数は期待どおりの動作をします

関数は、期待されることを実行する必要があります。それ以上でもそれ以下でもありません。関数の名前がfindAddress(latitude, longitude)の場合、指定された座標で住所を検索するか、住所を座標に変換できない場合は、NonenullEmptyまたは指定された言語に適切な型を返す必要があります。この関数は、近くの住所を検索したり、座標レコードを構築したりするなど、他のことを行うべきではありません。関数にはロギングや分析などの副作用がある場合がありますが、これらは入出力には見えません。

機能をテストできる

機能はテストできるように設計する必要があります。前のコード例では、addCustomer関数を定義しましたが、戻り値の型を定義していないため、そのテスト可能性は疑問です。もちろん、内部実装がどのようなものであるかに応じて、モックまたはスパイを使用してテストできます。これは、単に戻り値の型を提供するだけで実現できます。
fun addCustomer(customer: Customer): Customer
この関数シグネチャを使用すると、追加されたクライアント エンティティを呼び出されたコンポーネントに返すことができます。また、関数がこのクライアント オブジェクトに対して行うべきことを実行している (つまり、一意の識別子を割り当てている) かどうかを確認することもできます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION