paiza B004の問題を解く

ITプログラマー・エンジニア転職のpaizaより。

B004

【回答時間】84分48秒 【スコア】 (51点/100点)

なぜかB003が無いのでB004を。中々、点数が取れない。 Webサーバのログの解析をする問題。

ipアドレスのフィルタリングで凄い手こずった。 他のスクリプト言語PerlとかRubyとかの文法を確認しながらの方が早かったかもしれない。正規表現で一発でいけるかもしれない。 手こずった影響もあって、凄い汚い。

ソートにqsortを使おうと思って、すんなり組めたのには満足。

gist1dcde98f6ca996705783

paiza B001、B002の問題を解く

ITプログラマー・エンジニア転職のpaizaより。

B001

B001:PV調査(レベル:中級) 回答時間:23分5秒 獲得ランク:C 得点:80点

大きなデータでNGが出たらしい。型をlong longにしておけば、回避できたかもなあ。

gista4279ea2a73d2af99a83

B002

B002:値の計算(レベル:中級) 回答時間:24分57秒 獲得ランク:C 得点:30点

double使わないで、整数だけでなんとかする方法を探った方が良かったか・・・

gist4aa94c944c3dfb28786f

コードリーディング重要

新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiitaより。

コードを深追いする深さが、プログラマの成長限界をどこにしてしまうかという基本的なパラメータではないかと私は思っている。

業務中にコードを深追いして、なおかつハマっちゃって時間をかけてしまう事があるので、勇気づけれました。

業務だと、知ってる人にきいた方が良い、なるべくスピーディーに解決すべし、みたいな所があるんですよね。コードを深追いしたから周りの質問に答えられる側面もあるので、やっぱり読んで損はないのだけど。心苦しくなるのは、コードを読む行為が何かを生産していると言いがたいからなんだろうなあ。

振り返ってみると、以前にGCCGaucheを時間をかけてじっくり読んだのは自分のスキルアップに確実に繋がってるよなあ。

コード読む量を増やしたい!

Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Reading―オープンソースから学ぶソフトウェア開発技法

プログラミングについて

ソフトウェアエンジニアの目指す道 〜 ナレッジワーカーとしてのプログラマ | Social Change!

“まったく同じプログラムが大量にあっても意味はないのが、ソフトウェアの世界です。つまり、一品物を作っているのです。” / 部品化や、流用開発とかもあるので、建物を建てる行為に近いのかなあ。

リファクタリングはリフォーム。バージョンアップは増築。

でも作り直しはソフトの方がまだコストがかからない。

アーキテクチャとか、パターンって考え方は建築業界をヒントにしていると見聞きした記憶もあります。

MISRA C 2004

MISRA C 2004というC言語を安全に移植性が高くなる事を目指したコーディングガイドラインを守ろうという文化があるのだけど、守れているかのチェック・レビューが大変だ。ツールで自動化できると良いのだけど、ツールでは見れないので人力でやらないといけない所がある。それに妙に厳しい所があったりするし。

MISRA C 2012というのが最近出たばかり。日本語の情報が無いので、電子で原文を入手してみてはいる。最初の数ページを読んだ状態。MISRA C 2004よりプログラマに優しくなっているといいなあ。

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド

MISRA C 2004を日本語で解説した本

ソフトの問題か、テスト環境の問題か

TDDだと初めにテストを作成して、NGが出る事の確認から始まります。ソフトの問題か、テスト環境の問題か切り分けるのに必要な事だとちょっと腑に落ちました。

ソフトをウチの会社で作っていて、テスト環境を得意先で作っている中で、テストが上手くいかない場合に、ソフトとテスト環境のどちらも疑わないといけない状況になったんですね。これが、どちらに原因があるか分かるだけで、調査の時間も半分以下になるし、ウチが悪いのかどうか不明瞭な居心地の悪い時間がなくなるだろうなと。

TDDの本を読んだりしていると、説明はあるのですが・・・勉強になったと思います。

paizaの問題を解く

ITプログラマー・エンジニア転職のpaizaより、Cランク(初級レベル)の問題を解いた。標準20分の問題で25分くらい。しばらく使っていなかった関数の確認の時間と、問題文の読み込みが甘くて途中で修正を加えたのが大きかったかな。

回答後の採点は早い。機械的に判定させているみたいなので、コードの分かり易さはあまり気にしない方が良いかも。といっても、提出したコードは残ってたし、コードを書くスピードと分かり易さ・キレイさのバランスを探った方が良さそう。

数テストパターンの内に1個境界値NGがあったそう。どんなテストパターンでNGだったか分かると嬉しいなあ。

毎日コーディングするようにして、成長する様にもっていきたい。