Besides, perhaps the lower error rates is due to the lower complexity of the task? There's two ways to spin any given perspective.

The general consensus is that software development paradigms are flawed, and that the ridiculous syntax of C-based languages causes a lot of errors. At least this is the understanding at embedded level, since most of the industry magazines have run series of articles pertaining to these very issues.

The reason why hardware jobs often pay less is because that industry has already reached its world-market equilibrium. Software is getting there. The open source movement is making this happen more quickly and smoothly than it otherwise would. But having done both, I can tell you that hardware design takes a lot more thought and concentration.

Having worked the embedded market (telecom switches, spacecraft flight control systems, etc) I can say that the industry (and its trade mags) has its own set of biases from the limitations of the environment in which it designs...as much as the enterprise system industry who tout the inevitability of SOA.

I don't believe that embedded programmers are paid all that much in comparison to their mainstream bretheren despite it requiring more rigor. Perhaps there's a pattern there. Structured, limited, systems by their very nature limit the maximum complexity of problems solvable by the final system.

In any case, I dispute that it is "general consensus" that software development is any more or less flawed than most other human endeavors. If our paradigm is so flawed then it is doubly amazing that our work products are so successful that modern society would be impossible without it and we built an $300B+ industry from zero in 40 years. There has been an unending stream of customers for our poorly developed products built using "ridiculous" C-based languages.

Are you the hardware weenie that occasionally posts such gems that all software should be written in a Verlilog (or was it VHDL)? Can't be Verilog since that's C syntax based...

Are you the hardware weenie that occasionally posts such gems that all software should be written in a Verlilog (or was it VHDL)? Can't be Verilog since that's C syntax based...

No, but I am the one who thinks that VHDL or verilog are more suitable for building parallel systems than are sequentially-rooted languages -- not that there's no value to higher level programming. If that were the case, I wouldn't like Matlab as much as I do. I think I've expressed this entire thought in any instance where it has come to discussion.

I know it must be hard to listen to someone point out observed flaws in software development, your industry, as well as flaws I've read about, but there's no reason to get defensive. Software and computer science are much newer pursuits than mechanical and electrical engineering. In time, software development will become as robust a procedure as anything else: building a car, plane, or CPU, for example. But right now it's not. You should be able to accept that there's a lot of room to improve, and that, perchance, software developers are awfully arrogant when considering that it's expected for software to crash occasionally, even though that's not the case for similarly complex mechanical and electrical products. I know that the software developers aren't worse intellects, so what's the reason for the failure of software to be robust? My answer is that the paradigms make it too easy to release products built without great thought and concentration. The whole idea of "rapid application development" is a giant double-edged sword. My apologies if that wasn't entirely clear.

Software and computer science are much newer pursuits than mechanical and electrical engineering. In time, software development will become as robust a procedure as anything else: building a car, plane, or CPU, for example.

Those items of physical hardware do, however, fail and have "bugs". We wouldn't need mechanics and manufacturer recall notices if they were so perfect. Have you seen the published bug lists for some CPUs? It often becomes the job of a software engineer to make sure he gingerly steps around the CPU bugs to make he doesn't set them off.

If people were willing to pay as much for software as they do for a 747, and to hire teams of software engineers to regularly inspect and maintain that software, I can imagine software and 747 crash rate statistics being very similar, although one would case would usually involve more deaths than the other.

People want software fast, they want it cheap, and they want it chock full of features. Do anything complex and multifaceted fast and cheap, and I don't care if you're working with bits and bytes or nut and bolts, you're going to see higher defect rates. The market, unfortunately, drives software toward those higher defect rates. If you carefully hone and polish your software, trying to get as close to 100% bug-free performance as you can get, and/or you reduce features customers want in order to improve reliability, quite likely your competitors will eat your lunch. Their customers might bitch and moan about the bugs they end up dealing with, but they'll still keep buying the stuff that's available sooner with more features for a lower price most of the time.

Software does have some special weaknesses, and I'm sure there are ways to at least partially address those weaknesses which we either haven't found yet, or simply haven't implemented widely yet due to cost or inertia. But I have major doubts that there's some point of "maturity" awaiting us in the software development future where something as complex as a web browser or a 3-D video game becomes as robust as a coffee maker. I think the best we can hope for in the foreseeable future is to reduce the impact of inevitable failures so that software tends to recover more gracefully more often.

Ahh. C#.. I love that language.. but I do understand some of the hesitation from MAC users.. There are positive and negative sides to C#.. but then again, there are with any language. The one thing I love about C# is that it is easy and crossplatform compatible. I been using it for a few years now and I love it. Most of the Virtual Worlds I use now use C#. And those worlds are on Windows, Mac, and Linux.

This above is a Virtual World Simulator made in C#. ( Mono etc bla bla )

Anyhow.. I am a windows user who sees the light of MAC and have for years.. Just couldn't afford it until recently when they made OSX 10.5.4. Once they did that I can now run MAC on my x86 Laptop. Thank you guys !!!!

Now I can finally run my fave program Final Cut Pro and Pro Tools.. Yaaaay

Anyhow.. C# rules.. There is an IDE that you can get right now named MonoDevelop ( Simular to SharpDevelop ) that is unstable but seems to run..

Try it out. I will also be looking for C# IDEs. As I love the idea of porting over to MAC, the only thing that stops me 100% is the software I use with ease do not run on MAC yet. I repeat YET... Keep in mind guys.. not everything is for windows anymore. :P

Ahh. C#.. I love that language.. but I do understand some of the hesitation from MAC users.. There are positive and negative sides to C#.. but then again, there are with any language. The one thing I love about C# is that it is easy and crossplatform compatible. I been using it for a few years now and I love it. Most of the Virtual Worlds I use now use C#. And those worlds are on Windows, Mac, and Linux.

This above is a Virtual World Simulator made in C#. ( Mono etc bla bla )

Anyhow.. I am a windows user who sees the light of MAC and have for years.. Just couldn't afford it until recently when they made OSX 10.5.4. Once they did that I can now run MAC on my x86 Laptop. Thank you guys !!!!

Now I can finally run my fave program Final Cut Pro and Pro Tools.. Yaaaay

Anyhow.. C# rules.. There is an IDE that you can get right now named MonoDevelop ( Simular to SharpDevelop ) that is unstable but seems to run..

Try it out. I will also be looking for C# IDEs. As I love the idea of porting over to MAC, the only thing that stops me 100% is the software I use with ease do not run on MAC yet. I repeat YET... Keep in mind guys.. not everything is for windows anymore. :P

Anyhow.. Good luck..

John

Welcome to the Light Side of the Force, John. And major cudos for getting Mac OS to run on your laptop (more effort than I'd want to put into it).

Now, as for C#, it is about as cross platform as Obj-C is. Technically it is, and there is some support through the open source community, but from any practical, off the shelf stand point, no, it's not. Mono is what, 3 versions of .net behind now? Developing in a platform-centric language such as either of those two, if you're in individual developer, isn't a big deal, but if you intend to work with others, you have to be conscious of the standards that they will be used to. I honestly am not comfortable developing cross platform stuff (mac + unix/linux) in anything but C/C++. I could go Obj-C, since gcc supports it, and there is the GNUStep version of the foundation framework, but the vast majority of programmers in the scientific community have no idea it even exists. Hell, most are still stuck in fortran (shudder). So it would be counterproductive to try to bring my personal pet language into a serious environment.

C# does have some nice features, and also some really annoying ones. For Windows it's the defacto standard, but when you start stepping between worlds, it's USUALLY a very very poor choice.

So I guess my point is that the stereotypical mac programmer aversion to using C# is precisely what you quote as your favorite aspect. The cross platform capability, while impressive to you, is frightfully insufficient to those of us who are used to programming in languages such as C++. Also, if there is no support for the language built into our IDE, why the heck should we bother with it? I expect you'd get much the same reaction from most windows developers if you were to ask them why they don't program in Obj-C.

That was a bit of a long winded rambling there.

C

A Conclusion is the place where you get tired of thinking. - Lesicus Stupidicus

You'd have to show me some evidence before I buy that bytecode can approach the speed of machine code. Bytecode MUST be translated into machine code before it can be used, thereby adding at LEAST one extra cycle for every command. How can that be anywhere close to the speed that you can get from a machine code compile? By using an efficient JIT compiler and an inefficient machine code compiler? Go get an efficient machine code compiler.

Additionally: Every program written in C# requires .NET framework to be present on the computer... I THINK.... verify please?
--------> No Wrong! - .Net is set of Libraries like any language you can do more with Libs than with out them...

Additionally: C# is EXTREMELY high level. The higher the language, the less efficient it is, by necessity.

C# isn't any higher level that Java or C++ it's a compiled language like all the others - including the mongrel Objective C!

Additionally: C# does stupid things like require you to store the Main function (called methods in C#) as a class object. You then must instantiate an object of that class before you can use any functions that you may have written outside of the Main. That should be implicit.

- Depends on the type of project you writting - di you every use C# -doesn't sound like it..

Additionally: It's 3 am and I can't think of anthing else right now. Go with C++, and use visual studio if you wish, so that you can take advantage of the .NET libraries. You will have the benefits of C# (the library) and also the ability to use the same language on multiple platforms.

If people were willing to pay as much for software as they do for a 747, and to hire teams of software engineers to regularly inspect and maintain that software, I can imagine software and 747 crash rate statistics being very similar, although one would case would usually involve more deaths than the other.

People do pay as much. Microsoft at least used to make more REVENUE per year selling windows and office than Boeing did selling aircraft, not to mention the fact that the profit was much higher as software has virtually zero cost-of-goods-sold (COGS). Yet it all was crap.

People do pay as much. Microsoft at least used to make more REVENUE per year selling windows and office than Boeing did selling aircraft, not to mention the fact that the profit was much higher as software has virtually zero cost-of-goods-sold (COGS). Yet it all was crap.

MS software quality was in the 95% range if I recall correctly. Higher than most of the software industry for a period of time in the 90s. Haven't been following that since.

As far as MS making more money than boeing and the cost of software being lower that's crap. On a per unit basis MS obviously made far less. When you pay for high quality software it costs and arm and a leg but with equal quality levels as any other high quality engineering system.

The number of maintenance events is trackable and probably does not differ much from the hardware subsystems on aircraft. When you have over a million lines of code that's a level of complexity that isn't any different than any other component on an aircraft.

Go ahead and google 747 defects. Including one that downed the TWA flight.

As far as MS making more money than boeing and the cost of software being lower that's crap. On a per unit basis MS obviously made far less. When you pay for high quality software it costs and arm and a leg but with equal quality levels as any other high quality engineering system.

You don't get the economics. When you have something with 0 COGS, you can amortize the development dollars easily over large quantities of users. Planes do not have 0 COGS. In addition, planes of course have design-related cost but also manufacture-related cost, and the issues that go with. Software does not have manufacture-related cost or issues.

I would argue that the design of Windows took more dev dollar than the design of, say, the 787. The estimated would-be dev cost of Linux is $1B, according to sloccount. To me this screams that software design and development paradigm are inherently flawed. I blame C/C++/C#/Java. Stupid-shit. Using the C-family of languages is like building a 787 with hand-tools. Studies repeatedly show that languages like Ada shave off massive amounts of software dev dollar (and it runs hella faster than Java). So a it costs less to design a super-reliable system. It's quite apropos, given that most flight control systems are still written in Ada.

So that's the 180. This thread is years old. I'm not knocking SW developers, just the paradigm. I believe the paradigm is inextricable from the language.

I do get the economic and I understand that you are trying to argue that because software distribution costs are lower (not zero as you imply) therefore total quality should be higher. The two aren't connected directly.

Quote:

When you have something with 0 COGS, you can amortize the development dollars easily over large quantities of users. Planes do not have 0 COGS. In addition, planes of course have design-related cost but also manufacture-related cost, and the issues that go with. Software does not have manufacture-related cost or issues.

This is false. Productizing a software item does have costs and manufacturing and distribution costs are not zero. Secondly, development costs of aircraft are pretty high. The 787 has an estimated pure development cost of $16-18B (including all the cost sharing with Boeing's partners...about $10B for Boeing alone).

I've done both in house and external software product development. I can attest that the latter is more expensive than the former and the costs are non-zero.

Quote:

I would argue that the design of Windows took more dev dollar than the design of, say, the 787.

I would argue that a cursory google would have yielded that Vista cost MS $6B to develop and that $6B is lower than either the $10B or $16B estimates for the Dreamliner.

Quote:

The estimated would-be dev cost of Linux is $1B, according to sloccount.

Which is bogus. I personally have around 50K sloc tabulated in Ohloh and personal knowledge of the dev costs on two open source projects (where all devs paid by a company) and the Ohloh estimates are at least an order of magnitude wrong. These are similar estimation methods to those used to quantify Linux development value.

Quote:

To me this screams that software design and development paradigm are inherently flawed.

Bullshit. The value proposition of software is as high, if not higher, than comparable disciplines. think I quoted references three years ago so wont again.

Quote:

I blame C/C++/C#/Java. Stupid-shit. Using the C-family of languages is like building a 787 with hand-tools. Studies repeatedly show that languages like Ada shave off massive amounts of software dev dollar (and it runs hella faster than Java). So a it costs less to design a super-reliable system. It's quite apropos, given that most flight control systems are still written in Ada.

I blame your superficial understanding of software development to make such broad unfounded assertions. Ada does not shave off massive amounts of software dev dollars, if it did, then industry would have adopted it. Instead, even DoD has moved away from it except for some real time systems. It has advantages in this specific domain but the software dev costs for this domain are significantly higher than normal software development.

I've done flight system development. Have you?

Quote:

So that's the 180. This thread is years old. I'm not knocking SW developers, just the paradigm. I believe the paradigm is inextricable from the language.

And you would be incorrect in your belief given that these are all still procedural languages you're talking about and there's no paradigm difference between them from the perspective of development methodology.

I tried out Microsoft's Silverlight (basically, their answer to Java) and C# in a web application that I ran successfully on both a PC and a Mac, inside the browser. It is a simulator to test an idea I had about biological speciation. You can run it yourself at:

You must install the Silverlight plug-in for your browser, which is a .Net virtual machine to support the application. It should prompt for the plug-in installation when you first visit the page.

I did not focus much on making a fancy user interface; I just wanted to do the simulation and get results. What has impressed me about the project, though, is that (a) though I developed it on a PC under Windows, the simulator actually ran first time on a Mac; I had to make no changes whatsoever to make it run; (b) the user interface displayed the same way on a Mac as on a PC, and was usable with no problems; (c) the simulation ran at high speed on both PC and Mac; the just-in-time compilation aspect of C# and .Net worked like a charm!

I'd like to switch to using a Mac, and get away from Microsoft tools, which are a time/money sink I can no longer afford. But I'd like to keep using C#, and Silverlight if possible. I guess Mono is the only option; I wonder how stable it is, and where it stands regarding Silverlight support?

I heard folks were playing with C# front ends for GCC (some supernatural pad of .NET compilers and preprocessors being known as CIL). But I doubt it resulted into something industrially interesting.

Ack...stay the heck away from trying to use any of that. The mono CIL-gcc stuff I don't think was ever completed after the GSOC project ended and the CLI backend/front end is also a bit of a science project. Mono uses llasm and laasm2 as their CIL compilers.

If you're not going to use the MS toolchain just go with Mono to hide all that open source sausage making. Most of the other stuff is things only a free software zealot would use. Like gcj only less developed and more broken.

Ack...stay the heck away from trying to use any of that. The mono CIL-gcc stuff I don't think was ever completed after the GSOC project ended and the CLI backend/front end is also a bit of a science project. Mono uses llasm and laasm2 as their CIL compilers.

If you're not going to use the MS toolchain just go with Mono to hide all that open source sausage making. Most of the other stuff is things only a free software zealot would use. Like gcj only less developed and more broken.

No, no, I couldn't care less about C#.

We mean Apple no harm.

People are lovers, basically. -- Engadget livebloggers at the iPad mini event.

I was trying to keep you from steering ted down a rabbit hole and wasting a lot of time.

If you don't care about C# then why answer about something you're not interested in and likely not familiar with?

I would normally steer Ted toward Java except that Java on OS X is moderately annoying as well. Mono probably isn't that much worse and C# as a language has advantages over both Java and ObjC. Disadvantages too but on the whole much higher clarity and less cruft.

I was trying to keep you from steering ted down a rabbit hole and wasting a lot of time.

If you don't care about C# then why answer about something you're not interested in and likely not familiar with?

I would normally steer Ted toward Java except that Java on OS X is moderately annoying as well. Mono probably isn't that much worse and C# as a language has advantages over both Java and ObjC. Disadvantages too but on the whole much higher clarity and less cruft.

It's all explained in my first post on the topic. Ted wasn't asking us about Java, it was about C#.

We mean Apple no harm.

People are lovers, basically. -- Engadget livebloggers at the iPad mini event.

C# is the microsoft spawn of satan java hack that is windows only. Go C++ or use the OSX development tools from Apple

C# programs are just scripts passed to the runtime, which translates them into machine code on the fly. slow as shit. I'm not aware of any way to compile directly into a real executable. It should be avoided at all costs.

I'm correcting your misinformation. C# can in fact be compiled to machine code using Ngen, although the target machine still requires .net framework for the executable to run.

I tried out Microsoft's Silverlight (basically, their answer to Java) and C# in a web application that I ran successfully on both a PC and a Mac, inside the browser. It is a simulator to test an idea I had about biological speciation. You can run it yourself at:

You must install the Silverlight plug-in for your browser, which is a .Net virtual machine to support the application. It should prompt for the plug-in installation when you first visit the page.

I did not focus much on making a fancy user interface; I just wanted to do the simulation and get results. What has impressed me about the project, though, is that (a) though I developed it on a PC under Windows, the simulator actually ran first time on a Mac; I had to make no changes whatsoever to make it run; (b) the user interface displayed the same way on a Mac as on a PC, and was usable with no problems; (c) the simulation ran at high speed on both PC and Mac; the just-in-time compilation aspect of C# and .Net worked like a charm!

I'd like to switch to using a Mac, and get away from Microsoft tools, which are a time/money sink I can no longer afford. But I'd like to keep using C#, and Silverlight if possible. I guess Mono is the only option; I wonder how stable it is, and where it stands regarding Silverlight support?

Ted Toal

I use XCode on Mac for Mac development and VC# Express on Boot Camp (Windows XP) for Windows Development. One machine does both, but in separate environments.

Sure, the Visual Studio professional products are a money sink but IMHO they really are the best development tools for making Windows programs. Definitely look into using WPF applications if you haven't already! (requires .net 3.0 + / Visual Studio Express 2008 or 2010)

I assume you've used the Visual Studio Express products (which are free) ? If not maybe that will change your mind. I do 99% of my work in VC# Express 2008 and would only use the full suite if I needed to make an MSI. I'm toying with the idea of using VC# Express 2010 soon but at this time I really don't need anything that .net 4.0 adds.

This is obviously a very old thread; I came across it while looking for a C# for the mac - need to write some small GUI-based programs, prefer either C# or java to do the trick.

I thought I would mention a cross-platform solution that a partner and I used a few years ago - crreating a product to run on both Windows and Mac.

o We tried at first a cross-platform Basic. Gack! the programming tools were just awful, and the language was full of quirks.

o Decided to write it in java - which we both had used for years - but worried about the truly crummy java GUIs on the PC. (The Mac GUI looked great - at the time very Mac-native.) So what we did was make a front-end/back-end split; front end in C++ on PC, java on the Mac; backend in a subset** of java, for which we wrote a java -> C++ translator.

o Guess again. C++ and java were too far apart - we kept stumbling on edge cases. We redid the translator to generate C#. 1000 lines of code, ran like a champ. Reimplemented the GUI for the PC in C#.

Our final assessment: The C# tools were tops. (For java we used Eclipse.) If we knew at the start what we knew at the end, we would have made our base C# - rather than java.

Apple has made life pretty miserable for java development, so these assessments are definitely dated.

** The subset was almost pure java - no GUI elements, no other library elements, certain string and Object operations avoided. As we found we needed them, we design our own collection objects - thin wrappers around library elements in the respective platform languages. We pushed hard to even write general GUI elements in this "back end" language - squeezed the platform-specific front-ends down to about 10% of the code.

Hey man. C# isn't a bad choice at all, though C++ is great too. It just depends on what you want to make. If you're into making games with Unity 3D C# is definitely better than JavaScript. It has almost all of the features found in other object oriented languages and it certainly wont make you a worse C++ programmer, or any other language for that matter, knowing it. I say the shortest path to making cool stuff that you're excited to make is the best choice for which language to learn first. Good luck!

microsofts .NET is a terrible framework. Microsofts C# is crappy. Mono is a wonderful envirotment and pretty much anyone telling you to use crappy asp.net has never used mono and they pretty much mainly are microsoft fanboys especially if they are telling you to use c++ ontop of it all.

Especially since the visual series is nothing more than a bastardization designed to take down every programming language. Hence why basic is nearly dead because visual basic took it and screwed it up. Basic was so much better than visual basic. Visual c++ is a joke it creates errors and most of the fustraightions you hear about c++ isn't from actual C++ it is Visual c++ using microsofts crappy compiler which often doesn't work properly, like some of the simplest things that shouldn't be errors end up being errors. The GNU c++ compiler is much better and less bug free. Most of the people even recormending asp.net have never used anything but asp.net. And yes I have used asp.net for a while and learned to use it, there is no benefits to using it. Mono is one of the best envirorments for it as now you can use extentions and develop C# apps for many many platforms. Mono is such a wonderful envirorment it got sony using it for the psvita and you can make games for the psvita now using monogames with monodevelop.

This is obviously a very old thread; I came across it while looking for a C# for the mac - need to write some small GUI-based programs, prefer either C# or java to do the trick.

I thought I would mention a cross-platform solution that a partner and I used a few years ago - crreating a product to run on both Windows and Mac.

o We tried at first a cross-platform Basic. Gack! the programming tools were just awful, and the language was full of quirks.

o Decided to write it in java - which we both had used for years - but worried about the truly crummy java GUIs on the PC. (The Mac GUI looked great - at the time very Mac-native.) So what we did was make a front-end/back-end split; front end in C++ on PC, java on the Mac; backend in a subset** of java, for which we wrote a java -> C++ translator.

o Guess again. C++ and java were too far apart - we kept stumbling on edge cases. We redid the translator to generate C#. 1000 lines of code, ran like a champ. Reimplemented the GUI for the PC in C#.

Our final assessment: The C# tools were tops. (For java we used Eclipse.) If we knew at the start what we knew at the end, we would have made our base C# - rather than java.

Apple has made life pretty miserable for java development, so these assessments are definitely dated.

** The subset was almost pure java - no GUI elements, no other library elements, certain string and Object operations avoided. As we found we needed them, we design our own collection objects - thin wrappers around library elements in the respective platform languages. We pushed hard to even write general GUI elements in this "back end" language - squeezed the platform-specific front-ends down to about 10% of the code.

Um you can make GUI elements easly in java.

Not only that but C++ just because it differs from java doesnt mean it is hard to make a GUI system with c++. All you would have had to do is make a simple web browser in c++ that loads in the class file and modfy the outside GUI in c++. But doing it all java would have been a much better result.

Ahh. C#.. I love that language.. but I do understand some of the hesitation from MAC users.. There are positive and negative sides to C#.. but then again, there are with any language. The one thing I love about C# is that it is easy and crossplatform compatible. I been using it for a few years now and I love it. Most of the Virtual Worlds I use now use C#. And those worlds are on Windows, Mac, and Linux.

Users have hesitions for these reasons:
1.Outside of Mono , unity, & dotgnu C# is not crossplatform at all.

2.Mono, unity, & dotGNU are all potentially violating software pattens made by microsoft and anyone using their tools can be sued aswell

3. It is made by microsoft and is designed with malious intents to create a monopoly of languages which they are successfully doing when ever people purchase or even download any of the visual sweet. Schools accepting bribes are the worse in this matter.

The problem with C# and .NET isn't speed or usefulness, but that it's Microsoft and runs on a proprietary system (CLR). The JVM is just as quick, just as useful, more languages compile to Java bytecode (Scala, Groovy, Ceylon, Clojure, JRuby, Jython, etc...), and it runs equally well on Linux, OSX and Windows.

The problem with C# and .NET isn't speed or usefulness, but that it's Microsoft and runs on a proprietary system (CLR). The JVM is just as quick, just as useful, more languages compile to Java bytecode (Scala, Groovy, Ceylon, Clojure, JRuby, Jython, etc...), and it runs equally well on Linux, OSX and Windows.

Except that you can code C# on more platforms than Java today. Namely iOS.

Rather a biased comment I think. For all practical purposes (i.e. excluding mono) you can only use C# on Windows platforms. That said, C# is a well thought out language and is one of the most popular in industry (and that's the opinion of a long time Unix programmer).