スキップしてメイン コンテンツに移動

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 技術評論社 西尾泰和

人とコンピュータが会話をするためのコンピュータ言語。
いつしか人と人とコンピュータのためのものに。
その歴史の中でコンピュータ言語は進化し、変化を続けてきた。

今は当たり前のように存在する一つ一つに、
経緯、必要性、意味を付与してくれている。

そう、
新人の素朴な疑問に解を与えてくれる。
・・・かもしれない。

(以下抜粋。○:完全抜粋、●:簡略抜粋)
○Pythonでは、標準で添付されているdisライブラリを使って
 VMを実行する命令列を表示させることができます。(P.20)

○Pythonに標準添付されているastライブラリを使えば、
 特定のコードがどういう構文木になるかがわかります。(P.23)

●なぜfinallyを導入したのか
 Microsoft扱いやすいエラー処理の仕組みとして、
 構造化例外(Structured Exception Handling)を導入しました。
 構造化例外を採用することにより、
 コードの信頼性を高めることができます。
 プログラムが予期せず終了した場合でも、
 リソースを正しく破棄することができます。
 またgotoステートメントや戻り値の入念なテストを必要としない、
 簡素な構造化コードで対処できます。(P.68-69)

○「おかしくなったら処理を停止して速やかに報告すべき」
 という設計思想は
 「フェイルファースト」と呼ばれています。(P.76)

○C#は多くの部分でJavaを参考にしていますが、
 検査例外は採用しませんでした。
 C#の設計者AndersHejlsbergは、
 「検査例外のアイディアには何も間違ったところはない。
  検査例外はすばらしいものだ。
  だけどJavaみたいな実装のしかたでは、
  いくつかの問題をなくすかわりに別の問題を持ち込んだだけだ。
  もっとよい方法が見つかればC#にも検査例外を入れるだろう。」(P.80)

●型ですべての仕様を表現する世界が来るか
 今でも人間がドキュメントやソースコードから、
 「このデータを入力したらどれくらいの処理時間がかかるのか?」
 「この処理の過程でどれくらいのメモリが必要になるのか?」
 「スレッドの中でこの処理を使っても大丈夫か?」
 などを判断しているのが現状です。(P.124)

○ここで日本のコンピュータのパイオニア、
 後藤英一の文章を引用したいと思います。(P.132)

●NUL文字にまつわる不具合の例(P.164)
 #include
 #include

 int main(){
  int x = 9252;
  char str[3] = “abc”;
  char str[3] = “def”;
  printf(“%s\n”, str2);
  printf(“%zu\n, strlen(str2));
  return 0;
 }
 出力結果は、
 defabc$$
 8
 となる。
 これはdefの後ろのnullがabcに置き換えられ、
 さらにその後ろにxの9252が格納されてしまっているため。

●オブジェクト指向とは何か(P.186)
 2人のオブジェクト指向言語の設計者が、
 「オブジェクト指向」という言葉をまったく違う意味で使っています。
 ・BjarneStroustrup
  ・C++の設計者
  ・オブジェクト指向プログラミングとは
   ユーザ定義型と敬称を使ったプログラミングのことだ
 ・AlanKey
  ・Smalltalkの設計者
  ・「オブジェクト指向」という言葉の発明者
  ・オブジェクト指向とは
   『状態を持ったオブジェクトが
    メッセージを送りあうことでコミュニケーションする』
   というモデルでプログラムを表現することだ

●クラスが持つ3つの役割(P.210)
 1.まとまったものを作る生成器
 2.どういう操作が可能かという仕様
 3.コードを再利用する単位

コメント

このブログの人気の投稿

Excelのマクロの差分もGitHubみたいに見たいよね

なんやかんやでまだ残っているExcelマクロ。修正したはいいが、差分が・・・。 Google先生に聞いてみるとWinMergeでできるらしいが、なぜかうまくいかない。 そう、WinMergeもExcelもバージョンが新しくなっていたのでうまくいかなかったみたい。 前提は Excel 2013 WinMerge 2.14.0-jp63 over です。 以下差分を確認するための手順です。 WinMerge をインストール ここから WinMerge の2.14.0-jp-63 より新しいバージョンをダウンロード 画面に従ってぽちぽち押していけばいい。 ただし・・・このときに必ずカスタムインストールで プラグイン にチェックを入れること!!(このプラグインを利用します) WinMerge のプラグインの設定変更(やらなくてもOK) WinMerge を起動 プラグイン → プラグインの設定 → CompareMSExcelFiles.sct をダブルクリック ”ワークブックの情報を複数ファイルに展開する” にチェックを入れる Excel の設定変更 ファイル → オプション → セキュリティセンター → セキュリティ センターの設定 ボタンを押下 マクロの設定 を選択 ”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する” にチェックを入れる WinMerge で差分を表示する WinMerge を起動して、比較したいファイルを二つ選択する プラグイン → 展開プラグインの選択 → ファイル展開プラグイ に CompareMSExcelFiles.sct を選択して OK ボタンを押下する 各シートの差分と合わせて、*.bas の形式でマクロの差分が表示される(はず)

間違ったフォーマットのプログラムじゃないんだけど

以下エラーに対し、 ファイルまたはアセンブリ 'SSPI'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 以下環境で対応した話です。 VisualStudio2012(C# ASP.NET MVC4.0) IIS7.5 とあるところのdllを使用中 ASP.NETをIISに発行しようとしたら、上記エラーが発生。 他のプロジェクトでは問題なく発行できているのに、 何かと思ってみたら、google先生に尋ねてみると、 DLLファイルの対象プラットフォーム(32bit/64bit)が異なる とのことでした。 このサイトでは対処方法として、 運用環境のプラットフォームに合わせ、適切なランタイムファイルを配布してください。 と記載されていますが、今回の私のようにとあるところのdllを使用している場合などは、 そうもいかない場合もあるでしょう。 そこでdllを変更できない場合には、 IISのアプリケーションプールの設定で、 32bitアプリケーションを有効化してあげることで対応できます。 以下手順です。 コントロールパネル → 管理ツール → インターネット インフォメーション サービス (IIS) マネージャー を起動します。 変更したいアプリケーションを右クリックして、詳細設定を選択します。 32ビットアプリケーションの有効化をTrueに変更します。 もう一度発行します。 ここまでです。 簡単だけど知らないとなかなかはまるかなって気がしますね。 独特のくせなのかもしれません。 そして、次なるエラー発生中です・・・。

SQLServer2008でのトランザクションログの切り捨て方

SQL Server 2008でとあるDBのトランザクションログが一杯に。 BACKUP LOG DatabaseName WITH TRUNCATE_ONLY を使ってトランケートしようとしたら、 'TRUNCATE_ONLY' はBACKUP オプションとして認識されません。 との冷たい返事。2008で廃止されていたのを忘れていた。 SQL Server 2008 で廃止されたデータベース エンジンの機能@MSDN そこでヌルデバイスを使用してバックアップを取得する方法で、切り捨てを試みる。 BACKUP LOG DatabaseName TO DISK = ‘nul’ GO するとまた冷たい返事。 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 2008では過去にフルバックアップを取得しておかないと、ランザクションのバックアップが取得できないことを忘れてた。てなわけで、まずはデータベースのフルバックアップを取得して、 BACKUP DATABASE DatabaseName TO DISK = ‘nul’ GO もう一度トランザクションのバックアップをして、やっと切り捨てれた。最初から単純にしておけばよかった・・・。