TDDBC Sendai 8thに参加 ― 2018-10-21 15:44

・今やるべきことにフォーカスする
ユニットテスト先に書いてREDからGREENにする
・ユニットテストがあるからリファクタリングしやすい
的な良い習慣というイメージだった。
もっと厳密なルール付けとか、テストコードを実装コードでテストするようなテクニックがTDDにはあるようだけど。
実習はペアプログラミングなのでTDD初心者でもOKな感じ。
コードレビュータイムもあったけど、時間がなくてカットされてしまった。
せっかくなのでもう少し解いてGitHubにあげておく。C#とMsTest。
https://github.com/shimitei/csharp-mstest
他の人のコードレビューを見ると、golangはテストの実行が瞬時に完了して良い。
LTではSpockでのユニットテストがいい感じ。従来のテストフレームワークで気になるところが解消する。
TDDの暗黒面は、TDDが悪いわけではないがもっと優先すべきことがあるのではないかな。
設計・優先順位付けとかコーディングがうまくできていないと、結局技術的負債はたまる。
安易な設計でテストファーストにすると手戻りが発生してしまうし、何故かコードを複雑にしたがる人がいる。
安易でもさっさとすすめて問題にぶち当たって解決してのパワープレイができれば苦労しない。
TDDは設計やコーディングのさじ加減をうまくできる人には向いているけど、そうでない人は延々と時間を吸い取られるのでペアプログラミングしかないのかな。
今回のお題は数学的な概念で仕様がいきなりひっくり返ることはないため、インクリメンタルな開発に向いている。
最初は純虚数で次に虚数、ガウス整数が来る。純虚数と虚数を同じクラスにするか別のクラスにするか、最初の純虚数クラスを複雑に作りこんでしまうかでも手間が変わってくると思う。
というわけで、TDDをKeepしつつDDDにTryするのがよさげ。
プログラミングスキルの獲得について考えてみた(初級編) ― 2016-01-18 19:00
資料を見ても、そのうち書いた本人もわからなくなりそうなので整理してみる。
「プログラミングができる」とは、「プログラミング言語の文法」がわかり、適切な「データ構造とアルゴリズム」を選択しコーディング可能なこと。
FizzBuzz問題は、データ構造は考慮する必要がない初級の問題です。この問題が難なく解ける位プログラミングができる人は、ひとまずおいて、FizzBuzzまでの関門は何かを考えてみた。
FizzBuzzの平凡な解答は、ループ処理と条件分岐から成る。人の頭で答えを出す時にはあまり悩むことはなくても、プログラムのコードで表現するには優先順位を考慮する必要があります。
このFizzBuzz問題が解けない人は、ループ処理や条件分岐の構文を理解していないか応用することができていないのでしょう。
「上手な教え方の教科書」によると、プログラミングのような認知機能の学習がうまくいかない理由として5つの問題が挙げられています。
- バグ修正の問題(間違った認識を正すことが難しい)
- 領域固有化の問題(知識を応用することが難しい)
- 不良構造化問題(複雑な問題を解決することが難しい)
- メタ認知の問題(自分が理解していることしていないことがわからず、学習を進めることが難しい)
- 熟達化の問題(的確に技能を発揮するには一定時間の訓練が必要)
人に教える場合だけでなく、独習するとしてもこれらの問題点を確認することで克服しやすくなります。
「熟達化の問題」はいまひとつ説得力がないので、自分のレベルに合った問題を解くのが良いよと誘導するのに都合がいい理論を持ってきてみたりして(第二言語習得の理論のインプット仮説)。
とにかく、他の認知機能をそつなく学習できるような人はプログラミングにも同様の手法で学習が行えるはず。
プログラミングには論理力が特に重要とされていて、無ければ苦労するがプログラミングを学習することで鍛えることもできるのではないか。
コンピュータの操作方法やプログラミングの構文でつまずいてしまう人でも、コンピュータサイエンスを学ぶことで得られることはあるんじゃないかな。
TIS-100を紹介したかっただけなのに中級に続くかな。
モバイルAdobe AIRアプリをPCに展開する ― 2013-12-06 00:00


MinGWで変愚蛮怒をコンパイルしない ― 2009-09-22 20:15
gcc -finput-charset=cp932 -fexec-charset=cp932 hoge.c
などとしても
no iconv implementation, cannot convert from cp932 to UTF-8
と出る。
他のバージョンのgcc持ってくるとよさそうなのだけどめんどくさいのでしっかく。
いっそUnicodeで、となるとC言語ではさらにめんどくさそう。
Windowsな世界ではTCHAR(_TCHAR)と__T()マクロだけど、gccはなんか違うっぽいな。
JBand
<http://sourceforge.jp/projects/jband/>
はAngbandをUnicode対応にするらしいのでがんばってちょ。
ひさしぶりにsourceforge.jp眺めたらやたらプロジェクト数が水増しされているような。「(機械翻訳)」ってついてるやつは全部Freshmeatか。
lcc-win32で変愚蛮怒をコンパイルしない ― 2009-09-22 14:20
なんと、sjis対応してなかったのでしっかく。
表、能、ソに\足してごまかしてみたけど、化けて表示されちゃう。
コンパイル速いけれど、まだこなれてないのかなあ。
init2.cのstore_table配列で、宣言よりも初期化の記述が少ないと途中でコンパイルをあきらめたりする。てきとーに埋めると通る。
readdib.cのReadDIB関数でコンパイルエラー。
Error readdib.c: 324 the left hand side of the assignment can't be assigned to
if (!MakeBitmapAndPalette(hDC, pInfo->hDIB, &((HPALETTE)pInfo->hPalette),
&((HBITMAP)pInfo->hBitmap)))
これは
if (!MakeBitmapAndPalette(hDC, pInfo->hDIB, (HPALETTE*)&(pInfo->hPalette),
(HBITMAP*)&(pInfo->hBitmap)))
これでどうだ。
他にはchuukei.cでヘッダ足りない。
#ifdef WINDOWS
#include <windows.h>
#include <mmsystem.h> // added
#endif
VK_ATTN等の定義がlcc-win32に付いてるヘッダーファイルには無いので定義する。
Open Watcom C/C++で変愚蛮怒をコンパイルする ― 2009-09-21 21:00
インストーラー付きなのでインストールも楽ちん。
サイズが73.8MBは小さい方だろう。
入れたのはOpen Watcom C/C++ Version 1.8。
ソースに手を入れなくてもコンパイル通るし。
問題は、ツールの使い方にちょこっとなじめないくらいかな。
wcc386をコンパイラにして、wcl386をリンカにするのがお手軽そう。
wlinkとか使い方わからん。
wmakeもどこか違うのかなあ。-msでnmake互換で使おう。
変*愚蛮怒メモ
<http://www.asahi-net.or.jp/~KH4S-SMZ/heng/index.html>
にMakefileを、Digital Mars C/C++のも、置いとく。
dmcで変愚蛮怒をコンパイルする (4) ― 2009-09-21 08:33
fscanf, scanf, sscanf
http://www.digitalmars.com/rtl/stdio.html#fscanf
%iならオッケー。
init1.cのparse_m_info関数、parse_d_info関数のsscanfの%xを%iにする。
dmc編はこんなもんかな。
dmcで変愚蛮怒をコンパイルする (3) ― 2009-09-21 00:10
rcc angband.rc -oangband.res -DJP -DSJIS -j0 -r -32
リンカ
$(LINKER) /SUBSYSTEM:WINDOWS:4.0 /NOMAP $(OBJ), $(EXE_FILE),, comdlg32.lib gdi32.lib winmm.lib wsock32.lib,, angband.res
chuukei.objで_timeGetTime未解決。
#ifdef WINDOWS
#include <windows.h>
#include <mmsystem.h> // added
#endif
リソースコンパイラは日本語対応してなさげ。
rcc ang_eng.rc -oangband.res -r -32
ウィンドウのメニューは英語でもいいか。
実行ファイルは出来た。
実行すると、
'd_info.txt'ファイルの47行目にエラー。
bcc32ビルド版の変愚蛮怒が生成したlib\data\?_info_j.rawを持ってくると問題なさそう。
dmcで変愚蛮怒をコンパイルする (2) ― 2009-09-20 23:52
makefileの書き方も違ったらめんどくさい。
コンパイルオプションはこんな感じかな。
dmc -o-none -WA -D_WIN32_WINNT=0x0400 -DWINVER=0x0400 -DUSE_TRANSPARENCY -DJP -DSJIS -j0 -o artifact.c
さっそくartifact.cでエラー。
usleep関数はあるようなので、本来はh-config.hあたりに
#ifdef __DMC__
# ifndef HAVE_USLEEP
# define HAVE_USLEEP
# endif
#endif
とか書くべきか。
あまりソースは変えたくないので、コンパイルオプションに-DHAVE_USLEEPをつっこんで逃げる。
inet.cでエラー。
Error: 'fd_set' is already defined
FAQか。
Redefined type errors when including the socket header files
http://www.digitalmars.com/faq.html#fd_set
はまるー。
-DWIN32_LEAN_AND_MEANを追加してみると、
#ifdef MACINTOSH
なところでエラーになる。
定義済みマクロに__SC__があるせいか。
Predefined Macros
http://www.digitalmars.com/ctg/predefined.html
h-config.hの
#if defined(__SC__) || defined(__MRC__)
なところを
#ifndef __DMC__
#endif
で囲んで、ソースコードに手を入れたのでdmcはしっかく。
VK_KANAが未定義とか、ヘッダー古すぎだぜ。
これも意地で-Dで定義するか。
Error: need explicit cast for function parameter 5 to get
from: unsigned char *
to : char const *
関数の定義がchar const *だけど、unsigned char *を渡そうとしてるからダメ。融通がきかない。
(char*)でキャストするようにソースに手を入れるしかないかなー?
次はリソースコンパイラ。
dmcで変愚蛮怒をコンパイルする (1) ― 2009-09-20 22:38
まずは、
Digital Mars C/C++ Compiler Version 8.50
をダウンロードしてCドライブあたりに展開する。
PATHにC:\dm\binを追加。
パスを通すだけで使えてお手軽感あり。
sc.iniにINCLUDEやLIBの設定があるようだ。
リソースコンパイラが入ってないので
Basic Utilities
も取ってくる。
とっかかりとしてはmakefile.bccをコピってmakefile.dmcにリネームして直していくか。
Basic Utilitiesのbcc使えないかと試してみたら、XP x64じゃ動かないなあbcc32互換じゃなくて16ビット版なのかな。
cl互換使うのもなんなのでdmcのオプション調べるか。
最近のコメント