Being a Productive C++ Developer Without Internet

As developer, How many times during a day you need to ask google for something related to your work? How to use a library? Is there a fix for an encountered problem?

Maybe the answer is at least once a day.

Currently and as developers, the internet saves us a lot of time. Whatever the problem you have, just search the right keywords in google and instantly and in many cases you have a result that matches your need. Continue reading “Being a Productive C++ Developer Without Internet”

Visualizing C/C++ Projects: The Power of Pictures

A picture is worth a thousand words” is an English idiom. It refers to the notion that a complex idea can be conveyed with just a single still image or that an image of a subject conveys its meaning or essence more effectively than a description does.

This idiom could also be applied in software programming. Indeed you can easilly understand a mini project when exploring its source code. However a big project become complex and not easy to understand.  In such cases it’s better to visualize the source code using graphs and diagrams to assist the developers understanding the source code. Continue reading “Visualizing C/C++ Projects: The Power of Pictures”

C++ Algorithm Evolution: A Historical Flashback

Before the initial standardization in 1998, C++ was developed by Bjarne Stroustrup at Bell Labs since 1979, as an extension of the C language as he wanted an efficient and flexible language similar to C

In 1983, “C with Classes” was renamed to “C++” , adding new features that included virtual functions, function name and operator overloading, references, constants, type-safe free-store memory allocation (new/delete), improved type checking. Continue reading “C++ Algorithm Evolution: A Historical Flashback”

Tracking the hidden duplicate code in a C++ code base.

It’s known that the presence of duplicate code has negative impacts on software development and maintenance. Indeed a major drawback is when  an instance of duplicate code is changed for fixing bugs or adding new features, its correspondents have to be changed simultaneously.

The most popular reason of duplicate code is the Copy/Paste operations, and in this case the source code is exactly similar  in two or more places , this practice is discouraged in many articles, books, and web sites.However,  sometimes it’s not easy to practice the recommendations, and the developer chose the easy solution: the  Copy/Paste method. Continue reading “Tracking the hidden duplicate code in a C++ code base.”

C++20 Concepts: Eliminating Generics Paradigm Drawbacks

As Bjarne Stroustrup points out, “C++ is a multi-paradigmed language.” It supports many different styles of programs, or paradigms, and object-oriented programming is only one of these. Some of the others are structured programming, and generic programming. In the last few years C++ experts like Andrei Alexandrescu, Scott Meyers and Herb Sutter promotes the uses of the generic programming and they qualify it as Modern C++ Design.

Here’s what say Andrei Alexandrescu about the Modern C++ design:

Modern C++ Design defines and systematically uses generic components - highly flexible design artifacts that are mixable and matchable to obtain rich behaviors with a small, orthogonal body of code.

Three assertions are interesting in his point of view: Continue reading “C++20 Concepts: Eliminating Generics Paradigm Drawbacks”

The Key to Successful OOP C++ Project: Stable Abstractions

Robert C.Martin wrote an interesting article about a set of metrics that can be used to measure the quality of an object-oriented design in terms of the interdependence between the subsystems of that design.

Here’s from the article what he said about the interdependence between modules:

What is it that makes a design rigid, fragile and difficult to reuse. It is the interdependence of the subsystems within that design. A design is rigid if it cannot be easily changed. Such rigidity is due to the fact that a single change to heavily interdependent software begins a cascade of changes in dependent modules. When the extent of that cascade of change cannot be predicted by the designers or maintainers the impact of the change cannot be estimated. This makes the cost of the change impossible to estimate. Managers, faced with such unpredictability, become reluctant to authorize changes. Thus the design becomes rigid.

And to fight the rigidity he introduces metrics like Afferent coupling, Efferent coupling, Abstractness and Instability. Continue reading “The Key to Successful OOP C++ Project: Stable Abstractions”

Boost vs C++ Standards: The Future of C++

In 1998 a proposal for  a C++ Library Repository Web Site was posted by Beman G. Dawes. The original vision aims to satisfy two major goals:

  • A world-wide website containing a repository of free C++ class libraries would be of great benefit to the C++ community. Although other sites supply specific libraries or provide links to libraries, there is currently no well-known website that acts as a general repository for C++ libraries. The vision is this: a site where programmers can find the libraries they need, post libraries they would like to share, and which can act as a focal point to encourage innovative C++ library development. An online peer review process is envisioned to ensure library quality with a minimum of bureaucracy.
  • Secondary goals include encouraging effective programming techniques and providing a focal point for C++ programmers to participate in a wider community. Additionally, such a site might foster C++ standards activity by helping to establish existing practice.

Continue reading “Boost vs C++ Standards: The Future of C++”