技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

プログラム入門書で毎回「足りないなぁ」と思った事

脳トレパズル本 プログラマを育てる脳トレパズル 遊んでおぼえるPythonプログラミング&アルゴリズム を読んで、最初の課題が三目並べなのだけど、毎回入門書に足りないものがあるんじゃまいかと思うことがあったので、じゃぁ「職業エンジニアとして考えるならどういう開発スキルが要るのか?」をコンセプトに考えてみた。

テストの観点

この点は若干の本には記載がある。おそらく第二言語として学ぶ人を前提にしてる場合は書いてある。
しかし多くの入門書ではテストを書くこと自体が扱われていない。

しかし、プログラマーを目指す人のための入門書には是非ほしい。

本のコンセプト上入れるべきでないケースもあるだろう。
あくまで自動化をさせる目的の 退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング や、 プログラマを育てる脳トレパズル 遊んでおぼえるPythonプログラミング&アルゴリズムITエンジニアがときめく自動化の魔法~仕事を効率化したくなる自動化テクニック~ なんかでやる必要はないかもしれない。

とはいえ、実際問題テストというのは作りの確認作業なので、問題の早期発見には必須項目だ。

まずは作れるようになることが先決というのはわかる。
しかし実務の観点で見れば、保守の過程で修正し、変更が入る。既存の処理に影響を与えないためにもテストは必要だ。

ならテストコードは処理の仕様が変化していないことを確認(リグレッションテスト)できる最も簡単な手段でもある。

可読性の観点

この項目も欠けがちだ。
むしろ、実装系技術書全般で足りていない。

別に言語仕様と直接的に結びつく問題ではない。ならばコラム的に説明を入れることは可能なハズだと思う。

強いて書籍時の問題を挙げるなら、変数名が長くなる。尺や改行を踏まえると問題になることはわかるが…むしろ初心者にこそ叩き込んでおきたいと思うのは私だけだろうか?

可読性の観点はいくつもあるので、すべてを説明することは不可能だろう。感性の問題もあるので、深くは立ち入れないかもしれない。
しかし、名称の付け方、説明変数などのテクニックはどの言語においてもほぼ共通する内容のハズだ。

実務上では、常にコードを読む。なぜならここを修正したらどこに影響するのか?これは何をするものなのか?その速度はすなわちコードの修正、変更時間に直結する。
読みやすさに対する最小限の記述はすべきだ。

というかアルゴリズム系の本は、数学者的なセンスで書かれてることが多いので、変数名が数学的記号に合わせがちになる。
すると、説明もなく変数が名数学してると、数学してる人にしか読みにくい実装となっていて、本来知りたいと思っている層のエンジニアには読みにくいものではなかろうか?
エンジニア脳なら 「数式<=コード」で実装を理解する人が多いので、その点は本当に困る。

メソッド分離、クラス分離の考え方

これも実装系技術書全般で足りていない様に思う。

SOLID 原則まで紹介しろとは思いません。
役割、目的ごとに分割する考え方はやはり必要な気がします。

アプリケーション実装系、複雑なアルゴリズム(AIとか)の実装系本でこれが全くされてないと発狂しそうになる…。
1メソッドで 50 行とか書いてある入門書を見ると正直レビューに☆1(むしろマイナス)をつけたくなります。
「動けばいい」じゃねーんだよ! …すまない、ヒートアップした。

だが、思うことはそういう事だ…特に入門書である場合、初心者が学ぶ過程で、クッソ汚いコードを書く癖を残してほしくはないものである。