考え方を学ぶ上であなたの提案は何ですか?[閉まっている]


22

まず第一に、この質問をした結果はそれに似ているように見えるかもしれませんが、これは一般的な「私をより良いプログラマにする」質問ではありません。Programmers.SEでは、これらがここここここここここで閉じられるのを読んで見まし

プログラミングスキルを磨くための一般的な提案が多数あることを知っています(たとえば、SOを読む、推奨書籍を読む、ブログをフォローする、オープンソースプロジェクトに参加するなど)。これは私が望んでいることではありません

また、私はこのウェブサイトでの積極的な読者を認めており、いくつかの素晴らしい答えをもたらすことで私の好意に役立つことを望んでいます。ここで通信を読むと、プログラミング関連の分野で働いている、または働いた経験豊富な人が非常に多いようです。そして、あなたのほとんどは、雄弁で簡潔な方法で考えを伝えることができます。

私は最近、プログラミングができる人と本当に考えることができるプログラマとの違いに気付きました。プログラマーになれるためには、スポンジのような一生に身を委ねるだけです(つまり、読書、リスニング、ウォッチングなど、分野に関連するすべてを吸収する)。私は、あなたが周りの誰よりも速く問題Xを解決することを可能にするすべてのプログラミング概念を知っているだけでさえ、あなたが考えることができないなら、あなたは非常に自分自身を制限していると言います-あなたはただの高速ロボットです。

優れたプログラマーであるということは、プログラミングについてどれだけ知っているかとはまったく別の面があると思いますが、新しい概念を織り交ぜてプログラミングの専門家や趣味に適用できる方法です。人間の心とプログラミングのこの側面を掘り下げたり、対処したりする人はいません。(はい、また、私は十分に一生懸命に見えなかった可能性もあります。

それで、私が上で言及したことについて考えることに時間を費やした人、または個人的/職業的開発に少し遅れているためにここにいるのは誰なのでしょうか?通常の読書とは別に、あなたの/私たちの分野の他の人よりも良くするために他に何をしましたか?


私は素晴らしいので、あなたは私のように考える必要があります。
ChaosPandion

スティーブ・ジョブがやったようにいくつかのハードドラッグを行います。
ジョブ

関数型プログラミングは考えることを教えます。他のすべてはプログラムに教えます;)
ダリオ

回答:


13

考え方を学ぶための私の提案:

  • 新しい言語を学ぶ。自然言語とプログラミング言語の両方。常に新しい言語を習得してください。思考は言語でより少なく行われます。すべての言語には、思考に関する異なる「ビュー」があります。あなたが知っているより多くの言語、より多くの「精神的なツール」、概念、視点、抽象化が利用可能です。

「言語は私たちの考え方を形作り、考えられることを決定します。」-ベンジャミン・リー・ホーフ

さらに重要なことは、言語が私たちが考えられないことを決定することです。

  • 貪欲に読んでください。広く読んでください。プログラミングだけではなく、歴史、社会学、生物学、芸術など。あなたの視点を広げてください。新鮮な洞察を得る。あなたはただ食べるものではなく、読むものでもあります。新しいアイデアは、2つの(一見すると)異なるアイデアを組み合わせることに関するものであり、どこからともなく創造性を発揮する神の閃きではありません。

「チャンスは準備された心を好む。」-ルイパスツール

  • 謙虚さ。あなたがどれだけ知らないかを理解するために、あなたは多くを知らなければなりません。謙umさは、新しい考え方に心を開いておくのに役立ちます。
  • 理由を尋ねますか?方法に満足しないでください。
  • 数学を学びます。ロジックと抽象化を処理するための本当に強力なツール、一種の言語。数学を勉強すると脳が強くなります。「ジムに行く」と精神的に同等です。

自然言語についてはよくわかりません。それらを学ぶことには価値がありますが、考えるには?プログラミングのコンテキストでは?思考のための言葉の価値は誇張されていることがあります-言葉で簡単に表現できないアイデアがあるため、アイデアを形成するために言葉に完全に依存しているわけではありません。また、最も関連性の高い語彙(数学およびその他の技術分野の専門用語)は、言語間で大きく共有されています。
Steve314

6

私の経験からは、次の2つのことがわかります。

  1. 情熱、あなたがクラフトに興味を持っているなら、フィールドで仕事をしている多くのプログラマーよりもすぐに学び、適応し、すぐに考えられるようになります。(一部は自宅にコンピューターを持っていません。)
  2. 技術的な問題を解決する能力を持って生まれた人もいます。一部の人々は、自然に柔軟なソリューションを抽象化する能力を持っています。

これを超えて、プログラミングについての考え方や新しいプログラミングスキルの習得方法は誰もがかなり異なっています。私はあなたが新しいことを試み続け、あなたにとって良いことを続けることをお勧めします。


良い点、特に2番目の点。
11

5

考え方を学ぶ上であなたの提案は何ですか?

練習。練習。練習。

真剣に、精神活動(すなわち思考)は身体活動のようなものです。あなたがそれをやるほど、あなたはそれをより上手に得ることができます。(実際、身体活動には一種の精神的活動も含まれます。トップスポーツマンは筋肉を正しい場所に持っているだけではありません...)

それで、あなたは(効果的に)どのように思考を練習しますか?

(ここで私は何か他のものから一般化しています...)

難しい(不可能ではない)と思う思考問題を特定し、それらを解決する(考え抜く)など、もっと似たようなことをすると思います。


これをサポートします。考えることを必要としない反復的なことをするときはいつでも、何か他のものについて考えています。運転など、考えるべき反復的なことをするときにもこれを行う傾向がありますが、何とか考えていないときは、より良く運転できるように感じます。
アールズ

1
@Earlz-あなたの主張がわかりません。繰り返し作業をしている場合、それについて考える必要はありません。私は思考を必要とする問題を解決する練習について話している。
スティーブンC

経験はすべてに勝るものです(一般的な声明のようなものです)が、時間の経過とともに学んでいきます。問題に遭遇した頻度は、あなたが永遠に解決するのに永遠にかかったということです。また、あなたが問題に取り組む方法は、行き詰まることに集中せず、最も簡単なものから最も複雑なものまで、私がまだ試したことのないものに常に焦点を当てます
-farinspace

故意の練習。各反復から何かを学ぶ必要があります。

4

次の2つのことに興味があるかもしれません。

流れ

ハンガリーの心理学教授であるミハーリー・チクセントミハーリー、フローの概念を紹介しました。

フローは、活動の精神状態であり、活動に参加している人が、集中力、完全な関与、および活動プロセスの成功という感覚に完全に没頭します。

私は私のアプリケーションから学ぶ古い技術使用することにより、フロー毎日に入ることができて幸運だGTD次のアクションを

本当に違いがあると言えるでしょう。フローにいるときは、その状態にないときよりも高品質で高速になります。私は自分のやることに完全に集中しているため、より効果的に考えています

マインドフルネス

瞑想はプログラミング(および創造)能力を低下させる可能性があるという事実に懸念があるため、少し前に瞑想について質問しました。

Jon Kabat-Zinnメソッドのトレーニングを始めたばかりなので、広範な経験を皆さんと共有するのは時期尚早ですが、これまでに学んだ数少ないことから、これはおそらくあなたがやりたいことだと言えるでしょう。


+1問題に対する常識的なアプローチに相当するものについての本と「理論」があることは嫌いですが、GTDには確かに足があります。
11

1
@Orbling:ああ、私はあなたに完全に同意します。しかし、ほとんどの本のようにがらくたと価値があります。がらくたと価値とは、本を読んでいる人によって異なります。GTDの問題は非常に強力であるため、サイズに関係なく管理に集中するのではなく、入力を減らすのに時間がかからない場合は、クラッシュする可能性があることです。それは私の間違いでした;)

私の人生で抱えている問題は、非常に多くのインプットがあり、やるべきことがたくさんあり、そのような手順を実装する時間がないことです。確かにその中の価値を見ることができますが。
11

1
@Orbling:それが鍵だと思います。入力のフィルタリングは、CoveyまたはGTDに加えて、究極の生産性テクニックです。精神的に非常に強いことが必要です。

除外したタスクを実行するには、追加の人が必要だと思います(笑)。
11

2

私は常に、優れたエンジニアは生まれたものであり、作られたものではないと信じてきました。

問題の概要と構造図を効率的な方法で取得し、AからBにすばやく移動し、心をルーティングするために必要な粘り強さと探究心と組み合わされた、論理的、分析的、演ductive的な心が必要ですソリューション。

このスキルは、そのようなことを早期に十分に体験することで大幅に向上することを示唆する多くの研究がありますが、音楽も役立ちます。ある時点の後、あなたのメンタルマップはかなり配線されています。あなたの考えではなくあなたがどう思うという点で。

大人として考える方法を学ぶことができますか?問題を解くためのテクニックは確かに教えられますが、従うべきアルゴリズムがあれば、雄弁に言えば非常に「速いロボット」になることができます。直感的な理解はおそらく生来のものです。

これは私たちの職業に限定されるものではありません。多くのスキルセットは、後天的な反応ではなく生得的なスキルに支配されています。人々はそれが真実であることを望まないかもしれませんが、それはほとんどの場合そうです。


2

興味のあることに関するオンラインフォーラムを見つけます。何らかのコミュニティがあるもの。プログラミングではなく、プログラミングフォーラムは通常、ディスカッション指向よりもソリューション指向です。証人台に立ちます。守れ。引数を使用します。ブログもできますが、相手がいる方が良いです。重要なのは、誰かと何かについて意味のある書面でのコミュニケーションをとることです。多少大きなテキストを交換する場所。

あなたのアイデアを伝え、それらを議論することを学びます。あなたの見解を擁護しなければならないので、あなたは事実でそれらを支持しなければなりません。何かについて考え、自分の立場を明確にし、それをサポートする必要があります。多分それを変更することもあります。

その後、問題を分析して意見を統合し、それをあらゆるものに適用する能力を活用してください。プログラミングも。


それは思考を実践する一つの方法です。それだけではありません。
-Domchi

2

私が考える1つのことは、物事をシステムとして見る必要があり、すべてのシステムが関連しているということです。宇宙のあらゆるもの。人類、惑星、銀河、植物、日光、光合成、昆虫、岩、海、すべての相互作用システム。同様に、時間、サイクル:誕生、成長、衰退、死、虫、人、文明、山脈、星系の。エネルギーのための無限の闘争。すべてのシステム。

これは、研究の壮大な意味での生命と自然の研究です。関連するすべてのもの、相互作用するすべてのものを参照してください。日没を見て、太陽の周りを回る重力の深さを感じ、惑星の表面に引き寄せられ、毎秒300,000,000メートルで網膜に進入して画像を作成する前に赤く光る太陽光線を感じるとき、これに集中してください霊長類の脳で。

それを考え始めると、すべてがどのように関係しているのか、金と奴隷労働の価格、日本の太平洋および日本の工業団地全体の嵐がどのように関係しているのかを考えると、時間をかけて、本当に時間をかけて座って、このすべてについて考えてみてください。そうすれば、あなたの思考「筋肉」は本当に曲がって成長します。

今、その多くは表現力のしきい値を下回っていますが、それであなたを止めさせないでください。あなたの脳は、最も強力なコンピューターよりも強力です。押して。オーバークロックすることはできないと思います。

アルバート・アインシュタインが海を眺めながらビーチの芝生の椅子でくつろいでいる姿を映した白黒写真を思い出します。キャプションは、「ここにアルバート・アインシュタインが座っています。彼の脳で。」

次の課題は、すべてのものの複雑さと相互依存性を簡単な方法で伝えることができるようにすることです。これは、あなたが非常に年をとるまで、あなたにすべきことを与えるでしょう。


2

1つのアプローチは、意図的な実践です。

単純な繰り返しはスキルの獲得にはつながりません。パフォーマンスを評価し、物事を改善する方法を特定するには、内省的である必要があります。

実例:私の近親者はピストル射撃のスポーツで競います。トレーニング中、多くの集中力がすべてのショットを見直し、正しく進むステップに焦点を合わせます。直観的に反論すると、ミスをリプレイ(リハーサル)することでそれが補強されるため、悪いショットにはあまり焦点が合いません。

範囲内で100発撃つだけでは何も達成されません。20発の意図的な練習により、良い習慣が強化され、パフォーマンスが向上します。

同じことはプログラミングにも当てはまります- あなたが何をするかを考えてください。毎月、毎週、または毎日実行しないでください-時々、アクションごとに実行してください。

  • なぜその欠陥が私のコードで発生したのですか?
  • その欠陥の作成をどのように回避できたでしょうか?
  • ソリューションをより迅速に見つけるにはどうすればよいですか?
  • 私のどの仮定が間違っていましたか?
  • 十分に早く助けを求めましたか?速過ぎる?
  • 以前にその間違いを犯したことがありますか?
  • この欠陥は分離されていますか、それともパターンの一部ですか?
  • 根本的な設計上の欠陥はありますか?
  • もしそうなら、私はそれについて何かすることができますか?

等々 ...


素晴らしい点、これはすべて時間/経験に
伴うものです-farinspace

1
@farinspace(各反復後に時間をかけて評価および学習する場合のみ)。

1

あなたがエッジを見つけるまで、あなたが好きなもので突く行きます。

深呼吸、

ステップオーバー...

...

...見つけたことを他の人に伝えます。


1

だからあなたは考えたい

フロー、マインドフルネス、数学、情熱、練習など、どのように考えるか、どのように考えることを学ぶかについて、他のポスターからの素晴らしい提案がたくさんあります。

しかし、理由については誰も。目的は何ですか?

個人的に、私はあなたがその理由を知る必要があると考える前にそれを理解するようになりました。
唯一の最善の方法は、耳を傾けて見ることです。(私は両方をユニットとして取ります、あなたはそれらを分離することはできません)

要件を収集し、それらの要件を詳細なシステム仕様に変換し、これを設計ドキュメントと一致させ、コードを実装し、あなたの人生をデバッグするか、それらの段階のいずれかまたはすべてをスキップするかどうかにかかわらず、プログラミングを改善する唯一の方法解決策を見つけるのに5分か20年かを問わず、耳を傾けて見る必要があります。

ユーザーが望んでいることを聞いて、ユーザーがあなたに起こったことを聞いて、サポート担当者が見たと言って聞いてください。聴く。意味がわからなくても聞いてください。あなたは彼らがとても間違っていると確信していても聞いてください。聞いて判断しないでください。

手がかりを探すには、検索ではなく目を開けてください。現実を見てください。犯罪現場を見る前に答えを探し始めることはできません。欠陥を証明するまで、解決策を見つけることはできません。

私の経験からの一例(バグの解決についてですが、実際には何にでも適応できます)。明白な理由(合法およびその他)のために、私はこれからジューシーな詳細を除外します。安全性が重要なシステムで、オペレーターが重大な欠陥を報告しました。一部の地理的追跡デバイスは、生命に潜在的な影響を与えて、「持つべきではない」ときに実際に追跡を失いました(この「すべき」は本当の間違いであり、私たちの調査をあまりにも長く停止しました)。幸いなことに、これは数週間後にほとんど偶然に発見されましたが、遠隔地で別のシステムが稼働しており、別のオペレーターがそのシステムで追跡が失われていないことを証明するために来ました。これは私たちに再び考えさせました。私たちの主要なソフトウェアサプライヤは、私たちを一瞬でも信じなかったので、出かけて問題を証明しなければなりませんでした。唯一の方法は移植によるものでした:正確な運用状況を再現するシミュレーションを構築します。サプライヤが私たちを信じる証拠を実際にビデオ化する必要がありました。最終的に、シミュレーションにより、私たちの期待を超える情報が得られ、問題全体を理解することができました。その後修正するのに時間がかかりませんでした。

最後まで到達した唯一の方法は、1つのリモートシステムを別のシステムに論理的に接続して、同様のジョブを実行しますが、まったく同じジョブを実行することではありませんでした。それが手がかりを探しています(Look)。これは、1回限りのレポートを信頼し、システム内のランダムな不具合としてリッスンせず(Listen)、最初のレポート(Listen)と矛盾する2番目のレポートを再度聞くことによってのみ可能です。

そのため、正しい手がかり(耳を傾けて見た)、問題領域を定義し、根本原因または主要な原則を理解したら、最初にさらに理解するための解決策を考えることができます(試行錯誤、シミュレーション、デモンストレーション、概念実証、モックアップ、アルファ版、ベータ版)、最終的に堅牢なソリューションを提供します(実際の運用後にさらに改善できる場合があります)。

このようなリスニングとルックを行うには、オープンな心、信頼、そしてあなたの目標に対する絶対的な献身が必要です。これはあなたが考える必要がある燃料であり、あるいはあなたの思考が正しい目標に集中するためのポイントです(多くの場合、問題は考えることができないのではなく、あなたの心を行使するための明確な目標の欠如です)。


答えを得るために+1し、問題の領域を調べ、ユーザーの意見を聞くことが不可欠です。「そうだね」のコメントは-1なので、変更はありません。
11

@Orbling:わかりました、あなたは正しいです、それは少し船外でした。コメントを削除しました。生来の才能は正しいとは思いませんが、言及する必要はありません。
asoundmove

代わりに私の答えが-1だった場合、私はあなたのすべてを同じようにマークアップしていましたが、これで修正されました。あなたが私が言ったことに同意しないなら、それを間違っていると言うのは良いことです。
11

@Orbling、私は誰にも-1を投票するのを好みません、むしろ先に進みたいです...極端なシナリオだけが-1を保証し、ただ反対するだけではできません。
asoundmove

他のサイトは主に正しい/間違っているので、私はあなたに同意します。Programmers.SEは主観的であるため、他とは異なります。したがって、投票は基本的に同意、不一致です。あなたがそれが役に立つか役に立たないと思うかどうか。誰かに強く反対する場合にのみ、私反対票を投じます。この記事の執筆時点では、投票の2.6%は下票です。結局のところ、意見に挑戦する必要があります。
11

1

異なる種類の思考を区別する必要があると思います。

創造的思考-新しいアイデア、革新的なソリューション、予想外の結果を思い付く方法。この背後には科学全体があり、エドワード・ド・ボノを探し、創造性のテクニックなどがあります。多くのプログラマーがこの分野を検討しているわけではありません。

分析的思考-これは科学的プロセスを意味します。入力、出力を見て、重要なものを測定し、論理的な結論に達します。ほとんどの開発者は科学技術に精通していますが、実際に使用することはありません。そうする!

批判的思考-これはもっと哲学だと思います。後ろに立ち、全体像を見て、仮定を見直し、あなたの価値観を本当に果たしているのですか?哲学を学ぶには、素晴らしい作家やアイデアがたくさんあります。


0

数学は考え方を教えます。アプリケーションには創造性と経験が必要です。

私は、プログラマーを良くするために、生涯スポンジのような行動に身を委ねることを信じない。

良い洞察。大まかに言って、「偉大さ」の要件は「偉大さ」の個人的な定義に依存します...そして時間とともに変化しました。今日、プロジェクトの成功とは、核心の細かい部分をすべて掘り下げることなく、コンセプトをすばやくまとめることができることです。個人的な成功は、ジョンスキートのようなC#をマスターすることと定義できます。

職場でコーダーを読む。これについて詳しく説明するよりも経験豊富なコーダー。


0

一見無関係な領域からのアイデアと概念を適用する作業。私にとって、iPodの素晴らしさは優れたMP3プレーヤーを作るためのエンジニアリングではありませんでしたが、海賊版音楽と音楽販売のCD / Albumモデルで音楽エンターテインメント業界が抱えていた大きな問題を解決するのに役立ちました。ジョブズはおそらく、彼がピクサーで学んだことを映画産業に対処する際に応用したでしょう。彼は本当の問題が何であるかを知っていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.