Is 2012 the Year of C++? It looks to be. When SD Times launched in 2000, everyone was talking about Java. Not long after, thanks to the then-brand-new .NET Framework, everyone was talking about C#: inspired by Java, but with some C++ thrown in.
New languages have their moment in the sun. JavaScript, Ruby, Visual Basic, you name it. All of these languages, of course, are still very popular today.
Through it all, C++ has remained the sine qua non of modern object-oriented languages, in part due to its genuine foothold in standards (ISO/IEC JTC 1/SC22/WG21), in part due to its long history, in part due to its ubiquity in commercial development, and in part because it’s a solid language that continues to evolve.
One can be a fan of C++ and also recognize its shortcomings. The language is complex. It can be cryptic and hard for humans to read; it’s never easy to come up to speed on a large C++ codebase. The language doesn’t play well in managed environments, and coders and testers are responsible for trapping a lot of bad behavior. C++ isn’t Basic.
We are impressed with the changes appearing in the new C++11 standard released last November, as described by Larry O’Brien in “Building blocks for the future.” (p. 47). The work with type inference, lambda functions, range-based for loops and concurrency is solid. We don’t expect compiler and tool makers to have trouble adapting their software to handle the new C++11 features. Developers may take some time to understand and begin adopting those features, such as lambda functions. But coders will embrace them, once they understand them.
New languages appear all the time, often with excellent ideas. Scala is a language that’s gaining traction, for example. Other languages slip; we don’t see much ALGOL being written these days. Many continue plugging along within their niches, like Fortran or Lisp, or with an incredibly loyal constituency, like the triumvirate of Perl, PHP and Python. And some languages, like HTML5, defy easy categorization.
C++, though, whether alone or in conjunction with other languages, is reasserting itself as the foundational language for application development. Unless a developer wants to live entirely within a managed environment like a JVM or the .NET CLR, C++ knowledge is essential, and of course knowing C++ makes it easy to learn Java, C++, Objective-C and other “C-like” languages.
Yes, 2012 is the Year of C++, like the years before it, and the years that will come after.
Living, breathing agile
Soon we will stop talking about agile software development. As the agile mindset permeates more and more mainstream development, the term will run its course. For new developers and new teams, agile will simply be how software is written.
After all, how often do you hear development team leaders saying, “Listen up everyone, we’re going to use an object-oriented methodology for this project”?
One reason why agile is becoming a core tenet of development is simple: It works. Another is: It evolves.
It’s only been a decade since the Agile Manifesto, but we have seen a lot of vibrancy within the agile movement. From the early days of eXtreme Programming, we now have many methodologies, from Scrum to TDD, and offshoot concepts, like lean. Exploration is everywhere. Developers learn the basics of Scrum, and then organizations tailor Scrum to their own organizational culture. It’s all about the hybrids, which is how a creative art like software development should be.
One reason for this vibrancy is the continued success of events like the nonprofit Agile Alliance and its annual conference. On one hand, many enterprise developers attend events like Agile20xx to get introductory or advanced training on agile development. That’s all well and good. From SD Times’ perspective, however, the real work of the annual conference doesn’t take place in the classroom; it’s in the gatherings and meetings of the Big Thinkers, skeptics, enthusiasts and pragmatic practitioners who are continuing to push the boundaries, continuing to work out areas where agile doesn’t scale, and continuing its evolution.
Agile20xx was described by Laurent Bossavit, a member of the Agile Alliance, as “[T]he occasion where the various strands of Agile thinking come together, a time of convergence; and it is also where many new ideas are born, some of which go on to develop a more autonomous identity—thus also a time of divergence.”
That is how it should be. A healthy movement requires opportunities for discussion and dissent in order to grow, to thrive and to evolve. As long as long-term visionary thinkers can continue to meet at events like Agile20xx, agile development will become stronger. Branching, merging, experimentation. Let’s hope that the Agile Alliance continues this good work. Whether we attend Agile20xx or not, we all benefit.