from: http://www.infoq.com/articles/brooks-design-book-reviewDo you have a short list, say six bullet point items, that would summarize the most important lessons your book offers to designers?Study your predecesssors' works intently, to see how they solved problems.Try to figure out why they made the design choices they did; this is the most illuminating question to ask yourself.Study your predecessors' styles closely. This is best done by trying to sketch something in their several styles.Keep a "sketch book" in which you put ideas, designs, and pieces of designs, whatever your medium.When starting a design, write down your assumptions about the users and the uses.Design, design, design!What other areas of study would improve a graduate's ability to be a great software designer?Algorithms and data structures is the most essential study.Computer hardware architecture.Application areas, especially business data processing, database techniques and data mining.Psychology, especially perceptual psychology, since the user is all-important.Can you identify 3 Master Designers (any field) and 3 Master Software Designers, and 4 or five Master Designs. Exemplars we should all be studying and a short idea of why they are what they are?J.S. Bach, compositionsRembrandt, paintings and drawingsSeymour Cray, supercomputersChristopher Wren, buildings, especially his London churches.Nicholas Wirth, programming languagesDonald Knuth, algorithms Num post anterior coloquei um problema envolvendo xadrez e programacao passado por um amigo, segue aqui a melhor solucao que consegui (e com uma ajudinha do CLRS tenho que confessar :-) )Pra quem nao tem o go instalado na maquina, pode rodar o codigo em http://golang.orgpackage mainimport "fmt"func criaTabela(N int) [][][]int64{ T := make([][][]int64, 2)//pos atual e anterior. for t:= range T { T[t] = make([][]int64,N) for t2:= range T[t] { T[t][t2] = make([]int64,N) } } return T}func Solucao(N, M, xi, yi, xf, yf int) int64 { T := criaTabela(N,M) // Posicao inicial T[0][xi][yi] = 1 // Movimentos do cavalo. C := [8][2]int{{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{-1,2},{1,-2},{-1,-2}} // Percorre todo o tabuleiro para todos os movimentos e todos os lances possiveis. atual,anterior := 1, 0 for i:=0; i < M; i++ { for x:=0; x < N; x++{ for y:=0; y < N; y++{ T[atual][x][y] = 0 for m:=0; m < len(C); m++ { if x+C[m][0] >= 0 && x+C[m][0] < N && //Nao ultrapassa bordas do tabuleiro? y+C[m][1] >= 0 && y+C[m][1] < N { // entao soma de movimentos anteriores. T[atual][x][y] += T[anterior][x+C[m][0]][y+C[m][1]] } } } } atual, anterior = anterior, atual } return T[anterior][xf][yf]}func main(){ fmt.Println("Solucao:",Solucao(3,1,0,0,2,1)); // Vai: 1 fmt.Println("Solucao:",Solucao(3,2,0,0,0,0)); // Vai e volta: 2 fmt.Println("Solucao:",Solucao(3,2,0,0,2,1)); // Impossivel: 0 fmt.Println("Solucao:",Solucao(100,50,0,0,0,98)); //Numero beeeem grande...} Faz algum tempo fui no Ludus Luderia onde conheci muitos jogos novos e bastante interessantes.Um jogo de regras bastante simples mas de estrategia nao trivial e o Hasami Shogi. Como sempre gostei de implementar jogos de estrategia, fiz uma versao em Java do mesmo para me divertir e treinar algumas ideias e nessa semana pensei: esse jogo pode ser um bom exercicio pra comparar um sistema desenvolvido em Java com um sistema em Erlang, e entao comecei a portar o jogo. Segue um modulo Erlang com o algoritmo mais interessante de qualquer IA para jogos de estrategia: a busca na arvore de