Quote of the day

 “C++ is designed to allow you to express ideas, but if you don’t have ideas or don’t have any clue about how to express them, C++ doesn’t offer much help.”


I accidentally found this one in a FAQ on Bjarne Stroustrup’s homepage.


C++ is a great language, but it is indeed not a magic bullet. Properly learning all aspects of C++ and -more importantly- learning how to design system architecture and then expressing that design in language features takes a long time. I have worked as a lead programmer on several exciting projects, but I wouldn’t call myself an architect yet.


But most importantly, just using C++ does not -by itself- cause you to suddenly create well-designed applications. With C++ you can do a lot of damage if you don’t know what you are doing.

Career change

Starting on April 1st, I will start working for Genzyme Flanders as a Systems Engineer.


I already signed my contract at the end of last year, but had to keep mum until arrangements were made between my company and my clients for transferring ownership of my projects to someone else.


Genzyme is a company that makes cures for rare diseases. Genzyme Flanders is growing at a rapid pace, and building new production capacity. They are now at a point where the complete manufacturing process has been automated. However, there is still no interface between that process and the QA people, technicians, managers etc.


My job will be to maintain the process control software and the servers it runs on, and to create custom applications and services to extend the COTS process control software with the necessary functionality for process management, tracing and reporting.


Working at my current company: CIT Engineering has been a great experience, but an opportunity like this is once-in-a-lifetime.


There are no legacy projects to inherit, so I start with a blank slate. I am also allowed to make technical decisions about how the software is designed and which languages and technologies are used.


As an added bonus:


a)      It is located only 15 minutes from where I live.


b)      The coffee is great.


c)      My wife works there, so it is easy to arrange my working hours so that I can bring my children to daycare / school if my wife has to work early or late shift.


d)      There is a direct bus line from the corner of my street to the parking lot of Genzyme.


e)      I get to do C++, DCOM, C# and .NET programming which is exactly where my interests lie.


Combined with the fact that my wife and I are expecting another baby somewhere in July, it looks like 2007 will bring a lot of change and excitement.

Is C++ still a viable language?

Every so often someone in microsoft.public.dotnet.languages.vc asks about the future of C++, or if he should learn C# or VB.NET instead of C++. Some people are also confused if using C++ means they carry around C++ legacy code if they want to write pure .NET apps.


 


With C++ you can write pure .NET apps that have absolutely no legacy luggage whatsoever. On the contrary, you can write .NET apps and still use powerful features like templates. Another advantage is that the next version of VC++ will be able to compile for different .NET platforms (2.0 and higher).


You can also reuse native C++ code and libraries and create mixed mode applications. C++/CLI is the only language that allows you to do this.


But I have also learned C# and .NET, and I have used it since version 1.0 was released. I use it fairly often. In fact, at work I use it as much as possible.


C# comes with a lot of stuff that makes programming a lot easier and less time consuming. I love C++ but I admit that C++ does not hold a candle to C# when it comes to rapid application development.


But C++ is still the only viable option for scenarios where you need absolute control over memory and real-time performance. Interoperability with other code is also a strong area for C++ where C# wimps out. Raw performance also makes a difference when you are writing a piece of code that has to crunch through 300 MB of code to do some image processing for example. 95% of all large code bases are still native C++. Vista is completely native as well, so C++ is not going away anytime soon.


My reason for choosing C# for pure .NET applications is that it is easier to learn, easier to maintain, and less effort to create an application. And C# and VB will also have support for LINQ, and lots of other cool new features that are not planned for C++ at the moment. And by now there are more good C# programmers than C++ programmers. It is far easier to transfer ownership of a C# project.


I would not touch VB.NET with a 10 foot pole because I think VB is evil incarnate, and the syntax is too verbose and ugly as hell. But that is just my personal preference of course. Most people in the C++ forums would agree.


People in the VB forums may have a different opinion of course.


Anyway, if you want to do .NET programming, learn C#. If you want to do C++ programming, learn C# and C++ and the low level stuff like marshalling and interop. If you want to do C++ programming in the windows world, knowing only native C++ will not suffice anymore in most cases.


C++ is about power and flexibility. C# is about getting the job done with as little fuss and effort as possible. Both have their place.