Showing posts with label software craftsman. Show all posts
Showing posts with label software craftsman. Show all posts

Monday, April 27, 2015

What I learned from Agile Engineering training

Last week I took the 3-day "Agile Engineering Training" in TELUS, thanks a lot to our trainers from LeanIntuIt - Shawn Button and Declan Whelan.  I learned a lot from them.  The course covers TDD, Simple Design, SOLID principles, refactoring and dealing with legacy code.  The fun part is there are a lots of coding Kata, like Bowling Game, Gilded Rose, etc.  I am so glad to have an opportunity to learn those stuff, even actually I learned them since 10 years ago, this time I feel  this training is a kind of a review of what I learned since I decided to be a software craftsman.

Here is the mind map summarized of what I learned.


Add some thoughts:
  1. TDD/SOLID principles/Refactoring skills become more critical and in an Agile/Scrum team,  you have to be great, to be better so that you can deliver faster,  your code will be easier to change, easier to maintain;
  2. Simple Design -  it is summarized by only 2 points: fixing names and removing duplication. Combining with TDD's Red/Green/Refactoring cycle,  it means just repeating this 2 things with test cases, your complex code logic design phase will turn into many tiny steps which just renaming and removing duplication; if you can do it fluently,  the effort of thinking hard before hand becomes simple physical typing movements - which means you can design the code without thinking too much. This conclusion is so striking.
  3. Refactoring -  When I tried the Kata Gilded Rose (a simpler version which have all the tests before),  I really sense the power of simple design - refactoring by doing renaming and extract methods, then the business logic gradually emerged, and design pattern is emerged. For me it means as long as you have all the test cases, then you can refactoring the code without need to understand the business logic, and business logic will be more clear after you refactored.  That is another aha moment for me. Looks like code quality is a separate attribute beside the domain knowledge. If we apply this to code review, it means the good code should be enough understandable without understanding the business background first.

Resources:
  1. Four Elements of Simple Design, by JBrain
  2. Kata: Gilded Rose, this is a great Kata about refactoring, it worth trying more times

Sunday, January 20, 2013

learn from Jiro, practice your craft

Last week I read an inspiring article from linked in by Jeff Weiner(CEO of LinkedIn), called From Seinfeld to Sushi: How to Master Your Domain, this is a great article, it tells you the similarity of masters how to practice their crafts, either a joke master or a sushi master. I Love this idea since the software craftsmanship is my passion, and definitely we can apply this techniques into our software practices. And in the article the author recommends the movie of "Jiro dreams of sushi". Finally I found the movie and watched it twice. It is really an amazing movie, I highly recommend every one should watch that, very inspiring.

Here is what I learned from the movie:
  1. Passionate about his job, Jiro said he fell in love his job, he love to make better sushi, he is hardworking, I still working at the age of 85, working 364 days a year; 
  2. Take job seriously 
  3. Keep practicing over and and over 
  4. Keep improving skills bit by bit, kaizen culture 
  5. Money is secondary, he does not care the money, he only wants to make better sushi. 
I think all these can apply to our software craftsmanship practicing. I will wish I can still coding at the age of 85 like Jiro, now I am 43, compare to Jiro, there is still a long way to go, I remembered Uncle Bob once said: "I will code until I die, but I don't want die too soon".

For me I love the software craftsmanship, but I don't have the passion for my work, I don't love my job, this is the issue for me.
I think one issue in software industry is, there is no culture to encourage developer to perfect their crafts. The managers just want get the job done, there is no pride of the work, and the job market does not look at developers crafts. But the culture of crafts are deeply rooted in the Japanese culture, either making sushi, or practice kendo or making cars, you can tell they share the same philosophy.

The other one is software's complexity nature, sushi has been through a long time, it has a repeatable process, that is why Jiro can improve his skills by keep repeating the same thing over and over. But software is so different, it is very hard to repeat the same task, since each time you are doing the different things. But I feel we can extract the coding practices from the tasks, even each task is different, but coding practices are similar.
The third part I think in software craftsmanship, we need to improve our skills in many different area: like tools, different languages, process, and even your communication skills. This is really challenging and that is why it needs whole life training.

Quotes

Here I post some quotes from the movie:
  • Ultimate simplicity leads purity 
  • 5 attributes of a great chef: 1. take their work seriously; 2. aspire to improve skills; 3. cleanness; 4. impatience; 5. passionate 
  • They are better leaders than collaborators,. they are stubborn and insist on having in their way 
  • We don't care about the money, all I want to do is making better sushi 
  • Shokunin try to get the highest quality fish, and apply their technique to it 
  • I do the same thing over and over, improving bit by bit, there is always a yearning to achieve more 
  • I will continue to climb, trying to reach the top, but no one knows where the top is 
  • I've never hated this job. I fell in love with my work and gave my life to it. Even though I'm 85, I don't feel like retiring. That's just the way I feel 




Wednesday, February 16, 2011

Learning SICP: resources and tool

I started learning SICP since the beginning this year. The reason why I learn SICP is because I was inspired by Michael Feathers and Uncle Bob. In 2009, I watched the Michael Feathers presentation "Self-education and the craftsman" for SCNA 2009, he mentioned the SICP book, I did look at it at first, but LISP's lots of parenthesis scared me. Then last year when I read Uncle Bob's blog post "Why Clojure?", he recommend this book, and I also listened his podcast and watched his video about SICP, finally  make to decide to start learning it.

Here I would like to share What I found the useful resources and tools to learn SICP.

SICP text book
Official Web site: http://mitpress.mit.edu/sicp/
You can also get PDF file from here.

SICP Video
MIT open course ware

IDE
I tried several LISP IDE, but finally I found DrScheme is the best one. DrScheme is included in the software called Racket, it is formally called PLT scheme. You can download Racket software from this site. It works on my Mac Pro, I haven't tried it on the Windows environment.

To run the program and exercises on the book, you need to download the package for SICP,
SICP support in PLT scheme. Just follows the installation instruction step by step. The latest version is SICP (PLaneT 1.13)

To use the SICP language in DrScheme, first choose Language|Choose Lanuage..., in Teaching language, choose SICP(PLneT 1.13),
and another most important thing: click "Show Details" Button, in "Output Syntax" group, under "Output Style", choose "write" radio button, then select OK.
I found if you use default selection, which "print" is selected, the output for list is quite annoying.


SICP exercise solutions
I found following two sites are pretty good:
http://community.schemewiki.org/?SICP-Solutions
http://wqzhang.wordpress.com/sicp-solutions/

Uncle bob's blog post about SICP
why clojure?
http://thecleancoder.blogspot.com/2010/08/why-clojure.html

STUB1: SICP & Assignment
http://cleancoder.posterous.com/stub-1-sicp-assignment

Robert Matin interview in The Pragmatic BookShelf
http://pragprog.com/podcasts/show/32

michael feathers 
SCNA 2009 presentation:Self-education and the craftsman
http://scna.softwarecraftsmanship.org/media/michaelfeathers

About DrScheme
I am interested in the chaos graphs in this article.

Wednesday, December 30, 2009

Book Review: Apprenticeship Patterns

I finally finished reading the book “Apprenticeship Patterns – Guidance for the aspiring Software Craftsman”. It took me about 2 months to finish it, because I don’t have enough time to read it, usually I read it at waiting time for the Go train.

This book changes my strategy of my career path. If you want to become a master of software craftsman, then you should focus on improving your craft, not on promotion, not on money. This is a long road.

“sustainable motivations”
You need to keep motivate yourself, nurture your passion, beware don’t let yourself trapped into Golden Lock:" I'd like to learn something new ,but what I already know pays too well."

You need to find a better company, better job, team and co-worker. Love your job, do what your love, then money will follow. Money itself is not the goal, it is just the byproduct along the road to master. It gives me an insight that you should focus on finding the job that you truly love and passionate, even if it is low pay, because once you have the passion, you will generate creativity and energy, then it will generate the money for you. Another great example is Steve Jobs, in his commencement address to Standford’s class of 2005, he said: “You've got to find what you love “..., “Don't let the noise of others' opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”

This book helps me reinforce the understanding of the patterns, the author draws quite a few maps, connecting different patterns, then I realize the importance of the map, because it reveals the connections and relationship of each pattern. It inspire me that pattern itself is important, but also the connections. We should not only focus on each pattern itself, but also their relationship to other patterns.
Those patterns seems simple, it give ms an insight that yourself can find your own pattern if you think deliberately.

My favorite patterns in the book are:
  • Be the worst
  • The white belt
  • Nurture your passion
My personal goal is finding the Tao of programming, which is the right way of software developing, so go from apprentice to master is a must path for me.

I have another blog about this book: My personal practice map.