Tuesday, June 28, 2011

The path toward craftmanship

Recently, I read Andy Hunt's Refactor Your Thinking, one of the best non technical books I've read in the recent months. The book emphasize Dreyfus's learning model. The root of this model backs on 1970's. Hubert and Stuart Dreyfus began doing researches on how people attain and master skills. According to this model, a person when attaining a skill will go through five different stages: Novice, Advanced Beginners, Competent, Proficient and finally Expert. The model is a skill-based model, It emphasize on the learning process of a person for each skill versus the learning process of a person totally. This model has a great impact on agile methodologies. It was interesting for me, according to model, most of the people in their life are in novices and advanced beginners stages. They would not be expert at all.
They will not be watchful in what they will learn. They only try to solve a problem which occurred for them for the sake of solving, not learning. This is the problem. For being a craftsman or an expert, we must go through these stages, one by one, step by step.
All is this, this model describes the path which a novice must go to become a journeyman and then, undergo finally toward craftsmanship. I delighted a lot with reading this book and acquainting that the Dreyfus model is existed. Read It, You'll get benefits of it in long-term.

Sunday, June 12, 2011

Daily issues

Finally the end semester's exam have been arrived, and the first of them, Software Engineering II passed today. I hope the others of them, including numerical computations, Artificial Intelligence and finally Web Engineering arrive sooner and pass greatly. Every year, In every semester I try to bear in my mind that it will be great if I try a little harder across the semester against exam's night waking sessions. :) but it won't happen in these four years. This semester will be one of my lasts in the university and probably Iran, hope to these other exams finish sooner and of course with good results. This post hasn't any specific purpose, It was a honest confession about the future and my own mental thoughts.
About my reading favourites, I'm waiting for Uncle Bob's "clean coder" impatiently and I'm reading Steve Freeman's "Growing Object Oriented Software, Guided By Tests" currently. It's a wonderful and high content book and is recommended by biggest lords of the industry.
Today, Is June 12th and in persian calendar Khordad 22th. The anniversary of fraud in Iran presidential election in 2009 that caused great pain in the country. Anti-Government activists called a rally for today. We will see what will happen. Hope that the government change his behavior and do not treat with his people with brutality. AMIN, However I'm agnostic ;)
Ok, enough. I try to write review for Freeman's awesome book after completing reading of it.

Friday, March 11, 2011

How to read a paper?

Today, I read a paper about "How to read a paper". What a recursive sentence ;) .It's worse to have a glance on it. . The idea is formed in a three-pass approach. The first pass is to have an abstract view and a bird's eye view of the paper. The view will have more details in second pass and have the lowest abstraction in the last one. Let me brief. Here is the paper, This disciplined approach prevents us from drowning in the details before getting a bird's-eye-view.

Wednesday, March 9, 2011

HTTP POST & GET Requests

Very short post, Developers, please, for the sake of god, DO NOT use hyperlinks for an action which supposed to change the state of anything on the server, they're to be used only to fetch information. Hyperlinks generate an HTTP GET request and are not appropriate for this situation.
Here’s the issue. Almost since HTTP was invented, it has been recognized that there is a fundamental difference between HTTP GET and HTTP POST requests. Tim Berners-Lee wrote about it back in 1996. Use GET requests to retrieve information from the server, and use POST requests to request a change of state on the server.
For example in Rails development, instead of using link_to helper, we must use button_to, It generates an HTML form that contains just a single button. When the user clicks the button, an HTTP POST request is generated and a POST request is just the ticket when we want to do something like add an item to a cart.
So, Please, Please DO NOT misuse hyperlinks for the wrong action.

Sunday, February 6, 2011

Chad Fowler's Passionate Programmer - A Guide Toward Masterdom

After reading Dave Thomas's "The Pragmatic Programmer" which was one of the best books I ever read until this day, recently I read Chad Fowler's "The Passionate Programmer". It was wonderful. It guided me through a deep journey toward success in my career.

It doesn't depend on what career you have. I, as a software developer enjoyed from the book, as equal as my sister which is an Architect. She said me that, the book was perfect and she's using its tips and hints in the company for achieving the best performance and above all for getting the joy.

During reading book I write its interesting notes. Below are the important ones.

1. Learn more about business, financial issues and money.
2. Join an open source project and try to contribute.
3. Learn about internals of Java Virtual Machine and class loading.
4. Read the book ten-day MBA to better understand how a business operates.
5. Teach one topic you know well.
6. Learn each week one aspect of Java you haven't explore yet.
7. Read code.
8. Maintain a todo list. Have a log about your daily progress.
9. 8 hours work scheme seems awesome! Never work more than 8 hours a day from now on.
10. Maintain a log about your commitments and review them. What is your hit-rate of success?
11. Invest more on your social skills. Context and perception matters. So find out who you are dealing with and answer accordingly.
12. Invest more in your English, writing abilities and generally clear communication.
13. The path is the end! Read more about mindfulness and the Buddhism philosophy!
14. Having a road map for your product is what keeps you moving forward.
15. Make your improvements small and incremental but daily.
16. For most of the big, difficult goals you’re striving for, it’s important to think not about getting closer each day to the goal as it is to think about doing better in your efforts toward that goal than yesterday.
17. Avoid waterfall career planning, Set big goals, but make constant corrections along the way. Learn from the experience, and change the goals as you go ultimately.
18. Carve out weekly time to investigate the bleeding edge.make room for at least two hours per week in order to research new technologies and to start to develop skills in them.build simple apps with them. understand what new technology enable us to do in order to current-techs.
19. best ways for showing yourself is public speaking and publishing, Start from web: First, read blogs. second open your own blog.
20. if you have no deadline, you will not finish the work.
These were most important notes.
I strongly recommend you to read the book, It's the key toward the success and above all, the key toward to feeling of joy in your life.
"But I say to you that when you work you fulfill a part of earth’s furthest dream, assigned to you when that dream was born, and in keeping yourself with labour,
you are in truth loving life, and to love life through labour is to be intimate with life's inmost secret.
Kahlil Gibran, The Prophet

 

Tuesday, January 25, 2011

Software Craftsmanship as a Thing

Dan North's recent blog post on software craftsmanship unleashed a lot of blog and forum discussions.

I, as a member of the craftsmanship's community prefer the Michael Feathers's opinion on the issue.

I think our community doesn't need labels. We must see our work as a "Big Thing". The "Thing" which lead us toward efficiency, better performance. The names doesn't make any differences. Our aim is common. This is significant.

As a comment in Micheal's post says, I guess this proves yet again that naming stuff is one of the hardest things we do. I sorta feel like this is a give up, though - replacing 'agile' and 'software craftsmanship' with 'thing'. I'd say all these conversations are already about the thing."

Do not get me wrong, I welcome debates and discussions but I think our community's main concentration must be the "Thing" not our naming conventions.

These are the posts correlated to the matter:

  • Dan North's original post
  • Liz Keogh explains her discomfort with the software craftsmanship manifesto.
  • Gil Zilberfeld draws a comparison between software craftsmanship and alt.net.
  • Jason Gorman wants us to avoid getting hung up on labels
  • Michael Feathers looks for more deliberate practice in our work.
  • George Dinwiddie provides a physical example of why quality work is important to a customer, and how certification and licensing doesn't help.
  • Dan North expands and clarifies some his earlier points.
  • Bob Martin says software craftsmanship is only about programmers tired of writing crap.

 

I usually use SVN for version controlling. Default application for showing differences in the svn is the typical diff application which existed in the Unix-Like operating systems. It is in the terminal and honestly saying, it's ugly and I can't work with it, So I decided to use FileMerge which is an standard app, lives in Mac OS. It's clean and graphical and shows differences beautifully, so I decided to use it for SVN diff.
Then, What I should do for this purpose!?
I googled and finally arrived at a thread in stackoverflow.com and It works like a charm, These are the steps to use FileMerge as svn diff default app.
First of all, we must have fmscripts installed.
$ svn co http://soft.vub.ac.be/svn-gen/bdefrain/fmscripts && cd fmscripts
$ sudo make

That's all, now we can use FileMerge in this way:
$ svn diff --diff-cmd fmdiff FILE1 FILE2
It's obvious that upper command must be in a directory that is under svn repository.

You can use aliases to use the command in an easier approach:
$ alias sfmdiff = svn diff --diff-cmd fmdiff FILE1 FILE2

Here you are, that's all. now you can use it.
$ sfmdiff FILE1 FILE2

This is the simplicity of Unix that Mac Os inherits it thanks to Darwin subsystem.
Unix is simplicity.

Ok, Then who am I?

After having my last blog in Persian, I decided to switch it to English. So, I'm David Qorashi, An Undergrad Software Student In Tehran, Open Source Enthusiastic, Sociology & Philosophy Lover and of course Software Development, Agile Methods, XP and TDD. I'm an open source enthusiastic and In this blog, I want to write about Agile methods, Java And Ruby, Specially Rails Framework. Wish to have a good time with each other. ;)

Testing syntax highlighter and Hello World Post ;-)

puts "Hello World"