私は個人的にプログラマーであり、Web、分散システム、データ処理に関心を持っています。
私はWebを、最も流行していて、生まれながらにしてクロスプラットフォームな表現・可視化技術だと考えている。分散型を、プログラムの協働・協働プログラムに最も適したアーキテクチャだと考えている。データ処理を、基礎・スキル・認知・視野・ドメイン知識をすべて兼ね備える必要があるものだと考えている。だからデータ処理に取り組むことは、基礎・スキル・認知・視野・ドメイン知識を高めてくれる。
これらはすべて無駄話で、しかもかなり回りくどい。しかし、無駄話を理解することは、私にとってそれほど簡単なことではない。能力の向上は厚積(着実な蓄積)から来ると思う。だから基礎となる事柄には、持続的な熱意を持ち続けるべきだ。
基礎には含まれるべきだと思うが远不限于:
データ構造とアルゴリズム、
算法、
网络(tcp/ip、p2p、http等等)、
コンピュータアーキテクチャとオペレーティングシステム(メモリ管理、高速バッファとキャッシュ、スレッドと並行性、リソースと競合、CPUサイクル、局所性の原理など)。
上記の基礎に「精通」という境地は永遠にないと考える。少なくとも私の知能レベルから見れば。例えば、厳蔚敏の『データ構造』を読んだなら、それで良い。さらに『アルゴリズムイントロダクション』を読んだなら、もっと良い。プリンストンのアルゴリズムを読めるなら、君はなかなかやる。さらに論文も読み、実際にvim、emacs、vs、eclipse、sublimeでコードを叩いたなら、世の中に溢れるブログのアルゴリズム記事の欠陥やレベルの低さを一目で見抜けるはずだ。それなら君にはまだ多少の実力がある。知識構造とプロジェクト経験は相互に影響し合う。同じプロジェクト、似たような役割でも、知識構造が異なれば、そこから得られる成長や総括も異なる。その成長が次のプロジェクトやより複雑なプロジェクトにもたらす利益にも差が生まれる。より長い時間軸で見れば、その差は10万の価値か100万の価値かというほどに大きくなる。
十年の実務経験があるのか、それとも同じことを十年繰り返したのか、その差はおそらくここにある。「Java精通」のような言い分が存在するのは確かだが、JVMに触れずに語るのは無責任だ。クラスライブラリやフレームワークの熟知は実際のプロジェクトや現場から得られるもので、単純なAPIに精通することもあれば、AOPを追いかけて理解することもある。適用は簡単にも複雑にもできる。パフォーマンスを重視する場面なら、自覚のにJVMに注目すべきだ。しかしJVMは巨大なプロジェクトなので、理解には長い時間がかかり、「精通」は難しいことと言える。一方で、よく使われる多くの場面、例えばBufferedReaderやFileChannel、mmapはすべてI/Oの選択肢となり得る。どれがより適しているかは、仮想マシン内部やOSが何をしているかを踏まえて初めて整理できる。最佳实践ついでに、Xss、Xmx、directMemoryといった簡単な設定についても、より深く理解できるようになる。同時に、仮想マシンベースの言語の限界を見通すのにも役立つ。例えばHBaseのBlockBufferは、本来は読み取り効率を高めるための設計だが、JVMのヒープとGCの仕組みによっては、この設計がHBaseを壊してしまう可能性がある。
この点は、同様にC#&CLRにも当てはまるはずだ。長年働いてきた人は、自分はある面で精通の水準に達していると思うか、自負するものだ。実際に達している人もいるが、それには気取り、偽善、そして機知をひけらかすのが大好きということが伴う。そういう人は、君とまともに議論しようとはしない。そうした人物は友人、同級生、同僚、上司の中にいるかもしれない。プログラマーは独立した容器の中で生きているわけではない。実力の面で自信と謙虚さを保ち、より多くの努力を払うことに加えて、自分自身のいくつかの原則を守り、ネガティブな企業文化やコミュニティ文化の影響を受けないようにすることも重視すべきだ。自分らしくあることこそが、技術とより良く向き合うことであり、雇用主により良い雰囲気と実際の価値をもたらすことでもある。
この世界に「叩き」は尽きない。叩きの中には、自分自身が非常に凄い人もいれば、自分よりはるかに凄い人もいる。それは彼らの生き方だ。感情のコントロールはテクニックではない。理解が深まれば深まるほど、何が単なる「叩き」で、何が「鉄が鋼にならないのを悔しがる」ような、期待ゆえの厳しさなのかが見えてくる。技術実用論については、「アメリカに行ったことがないなら星条旗を知るべきではない」という見方が常にある。例えば、すべての会社やプログラマーが接する機会があるわけではない。大数据しかし人間は、まだ空を飛ぶ手段を持たなかった太古の昔から、トーテムや壁画を通じて文明の探求と解読を始めていた。こうしたものは、実は信仰の力だ。俗に言えば、それは興味であり、もっと俗に言えば、チャンスは常に準備のできている人のものだということだ。準備をするかどうかは態度と理解次第であり、準備したものが将来使えるかどうかは巡り合わせ次第だ。実力と運はどちらも重要だが、運は自分ではコントロールできない。
人間の知識の大部分は間接的な経路から得られる。例えば、書物を読む、メディアを見る、風聞に耳を傾けるといったことだ。学校を離れても、知識の媒介から離れたわけではない。良い知識源は、良い学習方法よりも重要であり、これは通常、優れた大学とそうでない大学の主な違いでもある。ある学校の先生の中には、微博がまだ成長段階にあった頃からすでに教え始めていた人もいる。社会计算もしこの知識の経路がなければ、ETL、データマイニング、転置インデックスの意味を認識することはできなかっただろう。おそらく君はすでに、修正・追加・コンパイルを器用に行えていたかもしれない。luceneました。
しかし、どれほど良い知識でも、実践を離れては昇華しない。良いプログラマーはコードと実装に注目すべきだが、単純なコピー原則は捨てるべきだ。コピーは大抵の場合、仕事を済ませるには十分だが。内々で言えば、重要なコードを十数回書き直すのは本当に馬鹿げていて愚かだ。しかし、それぞれの書き方に思考と理解が込められ、選択的にそうしているなら、改めてデザインパターンやリファクタリングを見ると、「ああ、本当にこういうことか」と分かる。茴香豆式に馬鹿になるのは、それほど耐え難いことではない。少なくとも、何が間違いで、何が違いかを理解できるし、仕事の外での成長の場も生まれる。多くの人がこうした見解を持っている——中国人の技術はすべて劣っており、Hadoopも書けない、金を稼ぐことが最も重要だ、と。しかし自分自身はとても優れていると思っている。
実のところ、「Hadoopを書くこと」や「金を稼ぐこと」を基準にするという見解自体が、あまりに視野が狭い。人の一生において、金はもちろん重要だ。使えるHadoopを書くにせよ、ミニOSを書くにせよ、ミニ仮想マシンを書くにせよ、それほど大したことだと思わなくてよい。ソースコードを読むことと、自分で実装することで築かれる理解の深さは、天地ほどの差がある。この愚公山を移すようなやり方は、どちらかと言えば、より多く、より正確に、より深く学ぶことを自分に強いるためのものだ。Hadoop専門家の大半は、実はソースコードを読んだだけで、すでに本を出せるようになっている。実際、多くの会社は実務でごく単純で成熟したマイニングアルゴリズムを実行しているだけだ。iQiyiのエンジニアが線形回帰を行うのも、実用になれば十分だ。多くの会社はまだログを処理している。すごいアルゴリズムを思いついたところで、SSDに換装するほど重要ではなかったりする。だからといって、環境がなく、条件がなければ、研究しないのか?私はそうは思わない。
金を稼ぐことについて。私は、興味さえあれば、物事をうまく成し遂げられ、お金は自然とやってくると思う。収入が上がらないのは、往々にして、やっていることが高収入の領域にないからだ。プログラミングで大金持ちになるのは難しい。正直に言って、アウトコール嬢の1日の消費は、君の給料の数倍かもしれない。アウトコール嬢の収入は言うまでもない。ナイトクラブで思い切り楽しみたいなら、ルイ13世を2本開けないと、嬢に「にせ成金」と罵られるかもしれない。君の好きな赤・青・緑ラベルの花束を贈らなければ、彼女と一緒に住宅街やホテルに戻って遺伝的アルゴリズムを語り合うのも気が引けるだろう。
それでは周辺と一緒に探求しよう遗传算法そうした王社長や李エンジニアらの収入は、プログラマーの収入などとは比べるべくもない。
だから、プログラミングをすることと金を稼ぐことを、あまりにも作為的に結びつけるのはやめよう。局限お金を稼ぐ能力を身につけた。
来源:http://www.cnblogs.com/foreach-break/p/be_a_real_programmer.html