Is software development too complex today ?
I do have to wonder about the state of software development today. Personally I like a simple IDE (code editor) and a fast compiler. While my current development environment only takes about 20 megabytes of hard drive space, more main stream development systems take up gigabytes of drive space. So what has become of computer programming ?
I have always followed the simple of rule of “keep it simple”. but todays development tools are becoming so complex that it makes one wonder, what has happened to software development. Let me start out with an experience.
I have been writing software for the last ten years using a native code compiler using the native WIN32 API’s. When I first started learning the Windows API, I felt it was a bit complex at times. Surely the Windows API could have been designed to be more simple and easier to access. No wonder early C programmers found the Windows API challenging. As time when by, I found myself writing my own libraries to simplify working with the Windows API and today using my own libraries I find writing Windows apps relatively easy.
After ten years of working directly with the Windows API using a non Microsoft development system, I decided to try my hand with the latest visual studio, since I wanted to experiment with building a Metro application for Windows 8. Now I thought the Windows API was complex, but I was totally confused by Visual Studio. Don’t get me wrong, I am sure Visual Studio is a quality, powerful development tool and plenty of programmers are productive with it. My question is why has software development become so complex ?
While I write this article, I am listening to an interesting podcast which poses the same question:
First, I find that object oriented programming (OOP) is part of the problem. I am a procedural style programmer, which allows me to throw code together quickly, but I also like to have complete control of my code so I tend to lean towards low level coding. I want to be able to code quickly and easily, while still having high performance and low level accessability. Procedural style coding allows me to write fast and small software. I am work with my own tools which allow me to build apps wich are fast (native code compiled), small (tiny footprint), transportable (easily copied to a jump drive and run) and still powerful ( I am working with complex UI’s, OpenGL 3D, low level DIB drawing). I target slower computer hardware (can you say Atom).
Before you say that OOP is the only way to code, consider some of these links to those who are more experienced that myself who also doubt OOP’s benefits:
This quote attributed to Alexander Stepanov from an interview is quite interesting .
“Yes. STL is not object oriented. I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper’s Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras – families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting – saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms – you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work. “
Consider one experienced programmer who has asked these questions, Richard Mansfield. His white paper entitled “Has OOP failed ?” ( http://www.4js.com/files/documents/products/genero/WhitePaperHasOOPFailed.pdf )
broaches this subject. Richard Mansfield has a very long history in technology. He was the editor of Compute magazine for about 7 years and has written dozens of computer / programming books which in total have sold about 500,000 copies. A number of his books were on Visual Basic dot.net so he obviously had plenty of experience using OOP based languages. To quote Mr. Mansfield “There’s no evidence that the OOP approach is efficient for most programming jobs. Indeed I know of no serious study comparing traditional, procedure-oriented programming with OOP. But there’s plenty of anecdotal evidence that OOP retards programming efforts. Guarantee confidentiality and programmers will usually tell you that OOP often just makes their job harder.”
For more examples like this, see my article which goes into more detail: http://cwsof.com/blog/?p=425
For more info about my views on OOP: http://cwsof.com/blog/?p=397
So what do I want from a programming tool ?
Of course some kind of visual designer for laying out a user interface is necessary, but there is a lot more required than this. I am a firm believer in code generation. Actually, I find that developer written code generators can save a great deal of time and the generated code can be customized to ones own needs. I would rather spend time with building a code generator than to spend time to building a bunch of so called reusable objects. But what really makes a difference is using a programming language which is more natural in syntax. As a long time BASIC programmer, it is the languages natural syntax which I like the most. Also the more natural a language is in its syntax, the more readable the code is. Code readability is vital for software to be easily maintained. I also want performance. Of course, one may at times give up performance for the sake of ease of use, when performance in not critical. But when you need performance, you need be to able to write low level code. Even though I use BASIC, I use things like pointers when it will make the difference in vital performance.
I also find that quality compiled (native) code is the way to go. Performance depends upon quality machine code. I also find that transportability is important. Why shouldn’t we be able to simply copy executables and run ? How many apps today can you just copy the apps files to a jump drive, move it to another PC and run ?
I also do not understand the love affair with programming languages with unnatural syntax. C++, Java, etc. Why ? Code should look like human language. Even a non-programmer should be able to make some sense of what the computer code is doing because it is readable.
Code reusability is also important. One aspect of this is being able to have backward compatiblity. You know the old say “why reinvent the wheel” ? Why should programmers be force to do this, because coding styles and languages keep changing year after year. I wrote a BTree engine back in the mid 90′s which I ported to be used on 32 bit Windows and because the language I use maintained backward compatible syntax it was easy.