Last week I wrote about the Agile methodology. In the next several posts I will write about the Agile values. Many of them will be common for different teams e.g associations, non-government organizations, music bands, startups, small companies and international corporations.
Commitment. Before I provide the definition I will assume that we couldn’t talk about commitment without giving its context e.g tasks, duties. People may be involved in some project and not involved in others in the same time. We would like to paint our parents flat, and don’t want to do it for our parents-in-law ;)
Moreover, it won’t be very surprising if I say that people are able to work without any commitment. For this reason, we will also work for our parents-in-law.
Agile software development methodologies (Agile Manifesto) are often compared with the traditional project management called Waterfall. People who do that, are trying to answer the question, which project management style is optimal and when we should use them. I recommend especially the infographic from Agile vs Waterfall article.
The essence of the Agile are team and knowledge. The success of a project depends most of all on the skills, efficiency of communication and good team spirit. Manager should identify and eliminate the barriers to effiecient work. Often the most difficult are communication problems, for example lack of understanding the current needs. In Agile project we have to expect many, many changes. These are releted to current needs, often not inspired by company management. In Agile, it is hard to create stable work schedule. For some people it might be very annoying. Moreover typical Agile team hasn’t got fixed hierarchy. Agile team is able to cope with any problem if people know each other and cooperate. Each team member tries to handle tasks that best suit its competency. This is the reason why knowledge is very important here. Agile management might be a good choice for R&D projects.
From the point of view of the company, Agile methodology might be in conflict with the expectations. Company management want to get an information about: when it will be ready and how much it will cost. It is required to start the advertising campaign or plan other activities. Is Agile project management possible and efficient?
Today, I will show you three, clever macros. Thanks to them we can get rid of several problems. Full code and an example, as usual, are available on CWorking.
First macro: LOG
#define LOG(stream, pattern, params...) fprintf( stream,"%20s:%3u | " pattern "\n", __FILE__, __LINE__, ##params )
#define LOG(stream, dummy, params...)
I recommend to use it especially with the DEBUG_MODE flag connected to the makefile. Thanks to that we could switch off the logger e.g by changing the project build mode from “debug” to “release”. Logger syntax is the same as fprintf, but it prints not only a formatted string, but also a filename and a line number where logger was called. It is very helpful if we want to find a source of a specific log entry. All logs can be gathered in a log file, stdout, stderr etc. thanks to the “stream” variable.
Last time I wrote about an interface in C language. Today, I will describe how to implement an interface in C++.
In C++, like in C, we haven’t got any special keyword for an interface. We create it using an abstract class – class with at least one pure virtual function. Pure virtual function hasn’t got its own definition – implementation. It is only a declaration within the class, like below:
virtual void fun() = 0;
Pure virtual function has to be implemented in a corresponding derived class. It will be checked during the linking process. Typical interface is presented below
Everyone who ever wrote something in C certainly knows that it is a structural language. However not everyone know that object oriented programming in C is possible and quite simple. To start talking about this we need to know what is an interface and how to implement it.
An interface is a set of functions and rules which can be used to communicate with some specified object. An interface may be common for many different modules which have similar functionality. In my opinion, the most important purpose of the interface is a separation between control plane and algorithms. It is not hard to imagine that if we define interfaces for our application we can implement each module separately. The interfaces help team to cooperate and divide their work. Developer, who knows how to use all required modules before their implementation, will be more confident and will make less mistakes. Well organized project gives a greater chance to finish it earlier without sacrificing its quality.
GIT is a distributed revision control system that allows to working with the versioned files locally and remotely. It is something different then SVN, but its main functionality is quite similar. GIT was designed to increase performance of typical, for each revision control system, operations like: merging, pushing, pulling branches.
There are a lot of books, e-books and articles about GIT, but for the people who never heard about it Pro GIT seems to be a very good choice. After reading Pro GIT we will be ready to start using this system.