私はプログラマーですか?

それが今朝仕事に来たときに私が尋ねた質問です。 プログラマーのすべての兆候があるようです:私は1年以上コードを書いています、複数のプロジェクト(失敗と成功の両方)を持っています、データ構造、アルゴリズムとその評価を理解しています、ネットワークとコンピューターが鉄のレベルまで機能する方法を知っています、私はスクラム、かんばん、およびそれらのような他の人を知っていて使用しました。 私は正直に会議に行って耳を傾け、また正直に話しました。 彼の目にきらめきをつけて、彼は学生に講義し、それがプログラマーであるとどのように感じるかを話しました。 彼らの多くはプログラマーとして働きに行きましたが、私は自分のチームに連れて行ってくれた中で最も賢明でした。 パターン、JavaScript、.NETのトレーニングを読み、ハッカソンを実施し、ハッカソンに参加し、同じハッカソンの子供として喜びました。



私の第一言語は、あなたが笑うと思いますが、JavaScriptでした-2002年にIE 6で成功し、ここで私は偶然HTMLに関する本の手に落ちました。 私の注意を引くJavaScriptへの参照がいくつかあり、本の展示会に行って、巨大なJS本を買うようになります。 私の最初の「便利な」プログラムを覚えています-背景が黒いページには、「オフ」と書かれた「スイッチを入れてください」と書かれたスイッチの画像がありました。 スイッチを押すと、状態が「オン」に変わります。 ページの背景が黄色に変わり、碑文が消えました。 このプログラムで、私はまだ数日「強要」しました。 それで、それはもっと面白くて複雑になり始めました。 それから、私はまだ最適化について何も知りませんでした。または、ループまたはソートを作成するとき、プログラミングには少なくともいくつかのロジックが必要です。 すべてが「何らかの理由で」行われ、時には非常にゆっくり動作しましたが、それは私をまったく止めませんでした。 スイッチに続いて、ドロップダウンメニュー、不器用なアニメーションなどが競い合いました。

そして、私はCについて知りました-夜、彼の後ろに座って、役に立たないプログラムをプログラムすることができました-彼らから、そもそも意味がありませんでしたが、何かを作成できるという認識は本当に私を買収しました。 ファイルを操作し、ソケットを操作します(作業の原理を理解することなく)。 そして、画面に線やその他の図形を表示する方法を読みました。 最初にしたことは、加速して回転する独自の3Dキューブを作成することでした。 その瞬間、私の頭にはすでにサインとコサインのアイデアがありました。 したがって、ポイントを円状にねじる方法を考え出すために、特別な問題はありませんでした。

そして、大学での最初の1年で、C ++ Builderのようなものを見せてくれました。 そのとき、それはまだ忘れられていませんでした、ああ、私の既成のコンポーネント、ボタン、メニュー、テーブル(グリッド)の素晴らしさを見たとき、私は私の脳が幸福、素晴らしさ、これらで行うことができる非常識な量で夢中になると思いましたするボタン。 そして、私はそうしました-Windows XPの「ウィジェット」を覚えています。半透明の小さなプログラムは常にデスクトップにハングし、現在のディスクの負荷、メモ、天気、アラームをカレンダーの形で表示しました。 その時、私は自分のためにそれを書きました-書くだけです。 現在、これらすべてがシステムおよび一般的な同期とともに使用されています。 そして、このソフトウェアは、私がそれを書きたかったほどには説明されず、あまり説明されませんでした。 一般に、「ビルダー」と一般的にプログラミングとの私の2年間の友情はすべて、次の図で完全に説明されています。



画像



そして、ここに独特の転換点が来ました-既製のコンポーネントを使用して美しいアニメーションをプログラムすることは、面倒になりました。 これらのコンポーネントの内部で何が起こっているのか、どのように作成され、描画されたものに基づいているのかについての理解が不足していました。 また、パフォーマンスの問題が発生し始めました-時にはプログラムの動作が遅くなることがあり、その理由がいつもわかりませんでした。

非常に良い人のアドバイスに基づいて、リヒターの著書「Windows for Professionals。 64ビットバージョンのWindowsの仕様を考慮した効果的なWIN32アプリケーションの作成。「正直なところ-私は疑いを持ってWindowsを見て、それが「より遅い」システムだと考えました。 16歳のときに、2台目のコンピューターを集めた人が「Windowsの使い方を知っていますか?」という質問をしてきました。 それに対して私は笑って答えた:「もちろん」。 無駄に、彼は笑った-実際には、それはウイルスから落ちていたという事実またはメモリがアンチウイルスを使い果たしているという事実を責めたのはWindowsではなかった。 手が曲がっているだけで、システム内のすべてがどのように配置されているのか分からず、システムを一度インストールして新しいWindowsがリリースされるまで再配置する方法がわからなかった。

本を読んだ後、多くの場所に落ちました-今、私は私の目で火でWinAPIを理解するために急いで、その後、私はドライバーについて学び、それらを狂ったように書き始めました:仮想マシン、Windows XPおよびドライバーのインストール。 しかし、しばらくして、システムはBSODでクラッシュしましたが、これは問題ではありませんでした。 ドライバーの作成からどのようにドラッグしますか。 彼は私が退屈するまで引きずりました-ある時点で退屈になり、システムの低レベルのアクセスに夢中になりました。

私が次に見つけたのは(同時に起こった)暗号化とネットワークでした。 数日のうちに、私はOlieferの本Computer Networksをカバーして読みました。 それがどのように動作するかを物理レベルまで理解し、キューイングモデルの機能の原理を理解し、プロトコルを石で解析し、その後に独自のhttp-serverをプログラムしてftpをプログラムするのは非常に興味深いことでした。 基本的なメールプロトコルを理解し、Gmailのコマンドをコードから直接確認します。

この後に、データ構造、アルゴリズムの複雑さの評価、およびアルゴリズム自体が続きました。 「この章では、データをツリーに格納する方法を理解します」というフレーズの愚か者のように、私がどのように隣人になったかを覚えています。 そして数年後、キャンペーン中に「見よ、なんて木だよ」というフレーズに私は約15秒間馬鹿になり、この森のどこで友人が二本の木を見たのかを理解しようとしました。

一般に、プログラミングのトレーニングは、すべてが徐々に、正確に、そして簡単に与えられるようになったはずの方法ではなく、いくつかのスナッチで行われました。 十分な「ベース」がなかったので、私は多くのことを達成しなければなりませんでした-時には数学的、時にはアルゴリズム的です。 しかし、その後、すべてが適切に配置され、その後、.NETの世界に突入しました。

それから仕事に行きました。2年目でした。最初のプロジェクトを思い出し、プロジェクトコードを見ました。写真やその他の殻のない223メガバイトのコードです。 初期の頃、私はこれを理解しようとして心を失い、そして何もせずに関与しました-すべてがシンプルで明確になりました。

CLRの仕組み、ガベージコレクタの仕組み、オブジェクトのメモリへの格納方法、同期インデックスの仕組み、およびマルチスレッドプログラミングで発生する可能性のある問題を理解することに興味がありました。 私は座って、オープンソースプロジェクトのソースを、そのように、退屈から読みました。 そして、これはすべて学生に伝えられました-好きな人たち、そして私は知識を共有することを嬉しく思いました。 .NETの後にはフロントエンド開発の世界が続きました。私はCrockfordの講義を熱心に聞き、JavaScript標準を読み、パターンを理解し、CSSブックを読み、ブラウザーのニュアンスを読み、jQueryソースを読みました。 繰り返しになりますが、これをすべて学生に伝え、職場でそれを適用しようとしました。新しい「トリック」を認識して、それが意味をなすならすぐにプロジェクトのどこかに押し込みたかったのです。 睡眠とプログラミングなしで2日間座って、甘いお茶とお菓子で栄養を与えた-普通でした、体はこれに正常に反応し、まったく文句を言いませんでした。 同時に、私はお金のためではなく、あまりにも多くの時間を費やしました-脳は、緊急に実現する必要があるという考えによって影が薄くなりました。

一般的に、私は自分の仕事にうんざりしているプログラマーになるべきだと思うすべてをしました。

今年の8月、どういうわけか私はこのすべてにうんざりしていました-耐えられないほど退屈になりました。 6つのプロジェクトがあり、それぞれが独自の新しいテクノロジー、新しい知識、新しいプロセスに興味を持っていました。 そして今、これは起こっていません-「私たちは非常に安全なシステムを持っています」のようなフレーズはもはやa敬の念を引き起こしません。 私が今HR'ovからの次の提案を見ているように:



セキュリティシステムについて話しますか? Cookie、トラフィックを暗号化し、ある種の分散ネットワークを使用するには、何を提供できますか?

退屈



負荷の高い金融プロジェクトですか? なに? 聞こえません。 そして、あなたは多くのロードバランサー、農場間の通信のための独自のバイナリプロトコル、何百万人のユーザー、そして聖なるスクラムを持っていると言いますか?

退屈



ジオロケーション、検索、象限木の使用を備えた高負荷のプロジェクト。 Node.js + HTML5 + CSS3 +最新のJSライブラリ?

退屈



などなど。



2002年の最初のコード行から今日まで、この世界に役立つものは何もしていません。 彼は何も変えたり修正したりしなかったし、誰にとっても人生を楽にしなかった。 私はこの「庭」全体を追い続けていますが、新しい技術は喜びをもたらしません。 すべてがルーチンに変わりました。どのコードも単なるコードであり、異常なものは何もありません。許可すれば、以前と同じように「魔法」です。

プログラミングは私のものではないという考えに、私はますます頻繁に訪れます。なぜなら、人が彼の愛するものに飽きているということはありえないからです。 10年間のプログラミングの後、同僚の1人がすべてを残してエジプトのどこかに留学し、サメの狩人として働きました。

そして今朝、私は繰り返します、私はプログラマーのことを考えていますか?



あとがき

最後に何を言うことができますか? 今後はGoogleに移行します。おそらくプログラミングに対する私の情熱が再び燃え上がるかもしれませんが、確かなことは言えません。時間が経てばわかるでしょう。

誰かがこれをどうするかについてアドバイスをくれたら-事前に感謝します。 なぜこれをすべて書いたのかはわかりません。おそらく他に話す人がいないからでしょうが、話したいです。 そして、おそらく天気が悪いだけだからです-ミンスクでは大雨の太鼓が鳴っています。



ご清聴ありがとうございました。



All Articles