読者です 読者をやめる 読者になる 読者になる

コンパイラかく語りき

文系新卒プログラマーのメモ

「プログラマが知るべき97のこと」を読んだ。

プログラミング道

 非常に勉強になったので、所感とともに10個引用してみます。

[02] 関数型プログラミングを学ぶことの重要性

いきなり関数型プログラミングかい!って感じですが。

最近「JavaScriptで学ぶ関数型プログラミング」を読んでいて、非常に共感できる内容だったのでチョイス。カリー化や再帰を知ったことは、間違いなく自分のプログラミング観を向上させました。

関数型プログラミングパラダイムを十分に学べば、その知識、技術は、マルチコアへの対応以外にも幅広く役立つでしょう。まず、自分の書くコードの品質を大きく高めることができます。重要なのは、「参照透過性(referential transparency)」が向上するということです。

参照透過性が高い、というのは非常に素晴らしいことです。参照透過性が高いとは、関数がどこでいつ呼び出されようと、入力が同じであれば、常に得られる結果がおなじになる、ということを意味します。つまり、関数の評価結果が状態変化の副作用に左右されるということが少ない(あるいは、まったくない)ということです。 

 

[05] 美はシンプルさに宿る

「プログラミング哲学」的な記事。

1度目に書いたコードってだいたい冗長なんですよね。必ずムダを含んでいます。

ムダを排除して、コードを改良できたとき、僕は大きな喜びを感じます。

美しいコードとは、突き詰めれば、シンプルなコードのことです。システムを構成する各部分が全てシンプルで、個々の部分が担う責務も最小限に抑えられていて、部分どうしの関連もシンプル、そんなコードですシンプルできれいなコードになっていればテストもしやすく、開発速度を落とさずに長期間に渡る保守が可能になります。

 

[18] 学び続ける姿勢

この業界に入った時、常に学び続けようと心に決めました。

いくつになっても学び続けている人が大好きだからです。

そんな初心を思い出させてくれるような記事でした。※ちょうど今達人プログラマを読んでいます。

「達人プログラマ」を読み、学んだことを実践してみる。本の教えに従い、毎年1つ新しい言語を学ぶ。たとえ言語が無理でも、少なくとも毎年1つは新しい技術、ツールについて学ぶ。そうして未知のものに触れることは、新たな発想の元になる。

 

 

[22] 1万時間の訓練

自分が次の10年でどれくらいのエンジニアになっているのか。それは楽しみでもあり、そのための努力を考えると目眩がする想いでもあります。

そんな折にこの記事を読んで勇気づけられました。

専門的な技術や知識は、ゆっくりと徐々に身につくものです。1万時間が経過した途端、急に身につく、というわけではありません。それでも、ともかく1万時間やる、ということが大切なのです。ただ1万時間と言ってもそれは膨大な時間です。週に20時間なら10年かかることになります。「1万時間努力したはいいけれど、結果、自分にはエキスパートになる素質がないとわかるだけかもしれない」そう心配する人はいるでしょう。そんな心配はいりません。エキスパートには必ずなれます。何かに秀でた人間になるかどうかは、ほぼ、自分がなろうとするかどうかだけで決まるのです。すべてはあなたの意志次第なのです。

 

[26] 言語だけでなく文化も学ぶ

この記事の中ではたくさんの言語を学ぶことが推奨されています。

そして自分の周りにも、多言語の経験者が何人もいます。僕も彼らのようになりたいと思いますし、言語の実装差異を楽しめるようになりたいと思います。

言語にはその言語独自の文化というものがあり、真にその言語を知るには、その文化も正しく学ぶ必要があるのです。複数の言語について学ぶと、デザインパターンについての理解も深まります。

 

[65] バージョン管理システムを有効に使う

バージョン管理について。

記事の内容自体はとても当然の事が書かれています。ただし、バージョン管理の重要性と便利さには完全に同意します。

そして、最近転職したのですが、前職ではsubversionを使っていました。そして現職はgitです。gitのバージョン管理が素晴らしく、その感慨も含めてこの記事をチョイスしました。

バージョン管理ツールの操作は基本的には2種類しかありません。「コードの変更をリポジトリにコミットする」という操作と、「プロジェクトの作業ディレクトリで作業中のバージョンをリポジトリのバージョンと同期する(アップデー卜する)」という操作です。

 

[69] 車輪の再発明の効用

文系出身の自分は、アルゴリズムを考える能力に自信がありません。

なので、以前Underscore.jsというJavaScriptライブラリを読みました。そしてそのなかで定義されている関数を、一部自分なりに再実装してみました。

そのような経験があったので、この記事に励まされ、非常に共感しました。

車輪の再発明をしようとした結果、失敗をすることもあるでしょう。しかし、それは一度で車輪の再実装がうまくいくよりも貴重な体験になるはずです。自分の予でゼロからコードを書き、あれこれと試行錯誤をすることを通して学ぶのは、ただ技術者を読んで学ぶこととは大きく違います。試行錯誤をしている間は、悔しがったり喜んだり、感情が大きく動くことになるからです。

本を読むなどして知識を頭に入れることも大切です。しかし優れたプログラマになるためには、経験を積むことがどうしても必要です。現場で多くを見て、自分の手で何かを作ることが必要なのです。車輪の再発明は、プログラマが学び、技術を高める上で非常に重要なことです。

[88] コードは生涯サポートするつもりで書く

この記事に書かれていることは素晴らしいです。

僕は没頭しやすい人間で、どうしても視野が狭くなりがちです。常に他の人のことを考えてコーディングできるような、視野の広いエンジニアになりたいですね。

結局は気持ちの持ち方、さらに言えば、取り組む態度の問題ということになってしまうのだと思います。たとえば、同僚のプログラマやテスター、マネージャ、営業やマーケティングのスタッフ、エンドユーザといった人たちのことが念頭になければ、なかなかテスト駆動開発を採用しようとは思わないでしょうし、明解なコメントを書こうと心がけることもないでしょう気持ちの持ち方、取り組む態度を変えるには、実はちょっとしたコツがあります。それは、

いつも「このコードは生涯、自分がサポートし続けなくてはならない」と思ってコードを書く。

ということです。

 

[91] 良いプログラマになるには

この記事はBest1かもしれません。この記事に出会えて良かったと思います。

定期的に見なおして、エンジニアとしての自分の姿勢を常に確認したいと思います。

 

引用なし(全部引用したいくらいなので笑)

 

 

[102] 快適な環境を追求する

生産性と開発環境ってダイレクトに直結しますよね。ただし人間ですし、どうしても慣れた環境に定住してしまいがちです。常により良い開発環境を求めて、試行錯誤していきたいですね。

明日から、エディタの設定を少しづついじっていこうと思います。

快適な環境を追求するにはちょっとした時間の投資が必要になりますが、この投資は決して無駄にはならないでしょう。プログラムをリファクタリングし、より抽象化され高速な、バグのないコードを生み出すことに集中することも大切なことです。新しい言語やプログラミング手法を取り入れ、プログラマとしてスキルアップすることももちろん大切なことです。ですが、ちょっと時間を割いて快適な環境づくりを行うことで、コーディングするための時間をより快適に過ごすことができるようになります。それは一生のうち、かなりの時間が快適になることを意味するのです。

 

 

最後に

  • 筆者は文系新卒プログラマです。そのため、技術的な投稿よりもむしろ「かくあるべき論」をチョイスしました。
  • Best10と言いつつ、番号順に並べてしまいました。
  • ぜひ、書籍を購入して読んでみてください

 

追記:

ブコメにてご指摘をいただき、リンクを削除しました。