Introduction to Software Craftsmanship

Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration.

Agile mainly talks about improving processes; however for agile model to be successful in the long run, we need to support it with proper coding. Following the agile way of developing software without writing clean code, may significantly slow down the development of the system over years as the code gets messier. Qualities of clean code include readability, maintainability, efficiency, simple, all objects and methods have single responsibility etc.  

Software craftsmanship is an approach to software development that emphasizes the coding skills of the software developers themselves.

The Software Craftsmanship Manifesto extends and challenges further the assumptions of the Agile Manifesto, drawing a metaphor between modern software development and the apprenticeship model of medieval Europe.

Software Craftsmanship Manifesto

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, but also well-crafted software

Not only responding to change, but also steadily adding value

Not only individuals and interactions, but also a community of professionals

Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

© 2009, the undersigned.
this statement may be freely copied in any form,
but only in its entirety through this notice.


Clean Code

Let us quickly try to answer few common questions that will introduce us to clean code and Agile Software Craftsmanship.

Is coding still significant?

Some people may argue that coding is no more significant and time is not far when the code will be automatically generated by business people from the specification using tools. However, the book “Clean Code” contradicts this and believes that code will be there to stay and will be still relevant. He supports his view with the fact that, not even humans, with all their intuition and creativity, have been able to create successful systems, from the vague customer requirements.

Which is more difficult - Identifying bad code or making it clean code?

Identifying bad code may be easy, but fixing it will require more skills. The book “Clean Code” calls this extra skill as “code-sense”, and promises to generate this “code-sense” in us.

Is it easy learning to write clean code?

Software craftsmanship is not very easy and will need a lot of hard work. The book “Clean Code” describes the kind of effort needed as follows: “Learning to write clean code is hard work. It requires more than just the knowledge of principles and patterns. You must practice it yourself and watch yourself fail. You must watch others practice it and fail. You must see them stumble and retrace their steps.  You must see them agonize over decisions and see the price they pay for making those decisions the wrong way.”

Is knowledge or experience more important in writing clean code?

My answer would be "both". You need to first gain the knowledge and then apply it in your work. According to the book “Clean Code”, there are two parts to learning craftsmanship: knowledge and work. You must gain the knowledge of principles, patterns, practices and heuristics that a craftsman knows and you must also grind that knowledge into your fingers, eyes and gut by working hard and practicing.

Is quality or schedule more important in delivering solutions? What if managers are only concerned about schedule, but not quality?

Answer to the first part would be both. But being a developer, you should never give up quality for meeting schedule. Managers may be more concerned about schedule. Developers should however defend quality, as they are the people who know the code and importance of quality of code better than anyone. The book “Clean Code” gives the example of a doctor doing all the washing and cleaning before going to do an operation. Even if the patient asks him not to waste time in cleaning hands and instruments, he will still do all of them as he is aware about the consequences, if they are not done properly.



The book “Clean Code” by Robert C. Martin is considered to be one of the best resource for learning to write clean code and learn about Agile Software Craftsmanship. This is the primary reference book for all most notes in this section.


Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)