In general I avoid using proprietary software: all my programming uses open-source programs and libraries. This is part of my future-proof design philosophy.
My reason for doing this is that proprietary technology can be dropped on a whim by the company it belongs to, leaving your program unsupported. For example, it could become impossible to add new features in the future because the technology it is built with is no longer available. Furthermore, large corporations are quite happy to change the design of their products with no notice because they are marketing-driven, and marketing requires constant change regardless of the cost to you. So, you download an update and find your program no longer works.
There is also a problem facing the whole computer industry, which is that some of the biggest companies in the computer business are trying to lock-in programmers to their technologies so that it is impossible to make a program work on any other type of computer. I’m not naming names because there’s more than one company guilty of this practice and it would be unfair to say one was any worse than any other. They are doing this to increase their own market share – which seems fair enough – until you realise that they are doing this at the expense of their customers who have to pay far more to have programs developed to work on more than one type of computer. I am firmly against this underhand practice and only use methods which are non-proprietary and cross-platform, which therefore steers free of this practice.
Open-source technology is driven by a desire to make things function well. There is an emphasis in the open-source community for defining standards to ensure continuity. There is also an understanding of backwards-compatibility, so old versions of technology are maintained for those that still need to use them. Therefore, by using open-source technology, I increase the chances of your program working correctly and continuing to do so in the future.
I believe it is good practice to make all programs potentially portable to many different types of computer – for example, so that they will work on Windows, Apple Macintosh, Gnu/Linux and others. Even if you think you will only be using one kind of computer, can you be sure you will never use any other? My approach ensures that your program will be easily portable to all platforms.
For example, I use the following technologies:
- wxWidgets for developing cross-platform Graphical User Interfaces (GUI)
- MySQL or SQLite for providing cross-platform databases
- Standard Template Library (STL) for basic data structure design
- My own STLplus library for cross-platform data structures and operating system access
- Unicode for multi-lingual programs
- The Gnu Open-Source Compiler (gcc)
C++ Multi-Paradigm Design
The programming approach I use is C++ Multi-Paradigm Design.
C++ is the engineers programming language of choice, because it is fast, cross-platform, flexible, non-proprietary and powerful.
What makes C++ powerful is that it is a multi-paradigm language (i.e. one that supports a variety of ways of thinking about programming) that supports the most important paradigms for engineering. These are Imperative Programming (traditional sequences of commands), Object-Oriented Programming and Generic (template) Programming. No other modern language in common use supports this combination and is fast and non-proprietary (Ada and C# support these three paradigms but are slow and proprietary respectively).
This combination of paradigms leads to probably the most powerful design approach yet devised in software engineering. However, because C++ is very powerful, it is full of pitfalls for the naive. It takes a minimum of 5 years experience to be a capable C++ programmer and 10 years to become an expert. I have been using C++ Multi-Paradigm Design since 1992 and have become a master of the language. I have even contributed an open-source library that extends the language.