Few newbie Quesions on C#

And you are recommending that *more* people squeeze into the limited windows market?

Sorry, but you apparently don't know anything about the software development market if you believe C# is a limited market. Sorry...I know you mean well, but if you don't know what you're talking about please stop making suggestions based on your 'guesses' about the market. It's problematic for newcomers like the thread starter. The C# market is limited only in the sense that everything is finite. It isn't any more limited, however, than any other market.

Beyond that, even if the market were limited, it wouldn't matter, because a truly competent C# developer is going to be competent at problem solving and competent at object-oriented programming, which means it won't take much effort for them to be competent in whatever other language you think they'll be getting their job in.
 
Just search Indeed.com for C#, C++, and Java jobs in the area you want to work if you want to get a good idea of what is out there. There tends to be a ton of Java jobs, about half as many C#, and about half as many C++ as of C#. But there are still a ton of all of them (at least where I live).
I've done Java, C++, and C# and know several people that have done Java but now do C#. If you know one the others are easy to switch to. But honestly I wouldn't want to go back to doing C++ or Java development after doing C#. The tools it has make it much more enjoyable to use over the others. The former Java developers I know say the same thing.
 
Just search Indeed.com for C#, C++, and Java jobs in the area you want to work if you want to get a good idea of what is out there. There tends to be a ton of Java jobs, about half as many C#, and about half as many C++ as of C#. But there are still a ton of all of them (at least where I live).
I've done Java, C++, and C# and know several people that have done Java but now do C#. If you know one the others are easy to switch to. But honestly I wouldn't want to go back to doing C++ or Java development after doing C#. The tools it has make it much more enjoyable to use over the others. The former Java developers I know say the same thing.

Open job ads are highly misleading. The really cool jobs are generally not advertised on monster.com, but even leaving that aside many of the general ads are for jobs that have very high turnover. The latter translates a lower number of jobs into a higher number of ads.

Besides, when I look at ads I usually see IOS, Android, random javascript toolkits and the like. Selectively putting "C#, C++, Java" into the search box has problems in itself.
 
Why would you recommend to a beginner to use a language of limited professional use?
I haven't made any recommendations. Are you confusing me with someone else?

All languages have limitations; someone who won't recommend a limited language can't recommend any language.
 
Open job ads are highly misleading. The really cool jobs are generally not advertised on monster.com, but even leaving that aside many of the general ads are for jobs that have very high turnover. The latter translates a lower number of jobs into a higher number of ads.

Besides, when I look at ads I usually see IOS, Android, random javascript toolkits and the like. Selectively putting "C#, C++, Java" into the search box has problems in itself.

Yep, but it still gives you a good general idea of what is in your area.
 
I feel like of the discussion here is really from people who are not in the industry as a career when they say C# is not a major player. If you choose to write a web app that is going to run on windows server or a desktop application its pretty much an industry standard to write it in C#.

Now where I went to my college's career fair was packed with people who use C++ only as well as Java and .Net only and this was this year. C++ is machine language, it is used for high performance application that need to manage memory on their own in the most efficient ways possible and run "on the metal."

While some companies also use Java for the same type application it introduces a lot of nice memory management. The language chosen should be picked because of how it will benefit the application. I would chose .Net MVC5 any day of the week for a web application.

Also one of the reason you don't see Google or Amazon touting they use .NET is because they have been around long enough to develop their own dev tools and have a framework they have built for their business model. Also Google doesn't just open post jobs they have a very strict highering process. Some of Amazon's application are written in .NET as I recently just interviewed with them for the innovations team for the Drone Delivery System. They also have a strict hiring and interview process; so using them as an example is a poor one. Yahoo, well thats a joke to be honest right?

.Net Devs are extremely in demand right now, if you know .Net and do web applications and are familiar with enterprise level design patterns then you can pretty much pick your job. Working with those skills I literally was getting calls daily with job offers and had to take my phone number off of linkedin and that was the only job site I had it posted to. Plus Microsoft gives away visual studio express and Visual Studio Pro is one of the best IDE's I have worked with, this is also a huge incentive to a company that wants to get up and running right away with a web application that runs "in the cloud."
 
A native language is one that the processor can understand directly. I'm not aware of any processors that execute C++.
 
You're being needlessly pedantic. The term "native programming language" commonly refers to any language which compiles to an assembly language. C, C++, D, Haskell and others are frequently referred to as "native programming languages", despite not being machine code.

Pedants may refer to it as a "compiled programming language", if they wish.
 
A native language is one that the processor can understand directly. I'm not aware of any processors that execute C++.

A native language is anything which can be compiled into instructions a processor can understand directly. Anybody who says otherwise is in the business of wasting people's time, rather than being constructive and helpful.
 
A native language is anything which can be compiled into instructions a processor can understand directly. Anybody who says otherwise is in the business of wasting people's time, rather than being constructive and helpful.

I'm not interested in wasting time, but is it okay to disagree with you? Is it neither constructive nor helpful to try to find agreeable definitions to aid in present understanding and ease further conversation?

In this case, I think the definition that you're presenting is too lax -- nearly all programming languages are native languages in that definition because they can be compiled into instructions a processor can directly execute. Languages that we think of as using byte codes and a virtual machine in their reference or popular implementations almost always have implementations that get the language to machine code.
 
I can't comprehend any way in which Maximusneo's post and the posts which follow could be improved by establishing a strict and universally agreed-upon definition of "native programming language", nor any way in which this thread (about C#) becomes more valuable as a result of having come to any agreement about the definition of the term.

His description of C++ is adequate for the purposes of this thread.
 
In this case, I think the definition that you're presenting is too lax -- nearly all programming languages are native languages in that definition because they can be compiled into instructions a processor can directly execute. Languages that we think of as using byte codes and a virtual machine in their reference or popular implementations almost always have implementations that get the language to machine code.

I feel that would be consistent with the space of languages. Certainly, if you can produce some black box where source code goes in and a native executable comes out, that particularly implementation of the language would be a native language, would it not?

I generally consider different implementations of a language to be in most senses distinct anyways, e.g. I wouldn't consider IronPython and CPython to be the same animal, nor would I consider C++/CLI to be the same as C++ on the GNU toolchain.
 
A native language is anything which can be compiled into instructions a processor can understand directly. Anybody who says otherwise is in the business of wasting people's time, rather than being constructive and helpful.
That can't be right. Can't all languages be compiled to machine code?
 
Can't all languages be compiled to machine code?

Maybe in theory...maybe not. Let's take for example Python. I do not know of any implementation of Python that can compile all of the features of CPython into machine code (or even come close, for that matter). CPython offers features which would be very difficult to implement in any sort of practical way. And they aren't unheard of features, either. There's another thread in this forum right now discussing one of them...eval(), which allows dynamic evaluation of Python code from a string. Since you don't know what the code may be at compile time, it would be cumbersome to support such a feature in native code. You might need to bundle a Python interpreter with your native binary that interprets the code as it comes in and then somehow interfaces it with the rest of your code. Certainly with a sufficient amount of innovation it could probably be made to work in some fashion, but I can't imagine it would be a particularly elegant solution.

So in theory, it's probably possible...There's no proof that it couldn't be done, just like how there's no proof that NP-complete problems can't be solved in polynomial time on a deterministic computer, so I'm not going to claim that it's impossible. But it hasn't been done yet, so at this very moment you cannot compile every language out there into native machine code.
 
There exist compilers for Python, so by your definition it is a native programming language - same goes for Java, and all the .NET languages.
 
C# has the CodeDOM, which doesn't seem horribly inelegant. I've never used it, but I believe it just invokes the JITter and dynamically bases the resulting object code.
 
There exist compilers for Python, so by your definition it is a native programming language - same goes for Java, and all the .NET languages.

They (the Python ones, at least) don't compile to native code. They compile to bytecode. You'll have to re-read my posts. I didn't say having a compiler makes a language native. I said having a compiler that goes from source to executable machine code makes it one.
 
Also I should note that there are some processors which execute Java bytecode! Not sure about CIL but I would not be surprised if someone has made one.
 
Edit: Python does in fact have a static compiler: http://cython.org/

...And if you bother to read, I didn't say there weren't attempts...I said there weren't any that worked for the entire language. Cython can't compile every piece of Python code, and is usually used to compile 'important' parts of the code that can be compiled and then interrop between Python and native code. I can write Python programs that Cython can't compile entirely.

And this is because to a large extent, creating fully native Python isn't the point of Cython. Cython is good for statically typing portions of your code in order to make them go fast. For the majority of applications, there's no need to make every part of Python compile down directly to native code.
 
Last edited:
http://www.nuitka.net/
Right now Nuitka is a good replacement for the Python interpreter and compiles every construct that CPython 2.6, 2.7, 3.2 and 3.3 offer.

You've also not addressed:
1) Bytecode is very often compiled to native code
2) Bytecode can be native
 
I'm also seeing people, w.r.t mobile development say that:
1) Java is the native programming language for Android
2) Objective-C is the native programming language for iOS
 

Add Python to the list, then.

I'm also seeing people, w.r.t mobile development say that:
1) Java is the native programming language for Android
2) Objective-C is the native programming language for iOS

...And do you know why people say that? Web and mobile developers like to call those languages 'native' in contrast to things like a web application running on Phonegap, or any of other wrappers that abstract the application away from the particular device/OS.
 
Some day mankind will divine a way to extrapolate the intended meaning of words based on the surrounding words. I'm not sure what we'll call this concept, but I suggest the term be "context".

Until then, I guess we'll have to make do with absolute linguistic chaos.
 
I think you're confusing yourselves with terms. A "Native" programming language is just the language the OS's main API is written in. E.G. Android with Java or Windows with C.

I think you're thinking about the difference between compiled languages (C, C++, Objective-C, Fortran), Interpreted languages (PHP, Python, Perl) and JIT-Compiled languages (C#, Java).

Realistically you choose the right tool for the purpose. If you're writing a graphical Windows application in Python, you're using the wrong tools. Same deal if you're writing an entire web application in C.
 
I think you're confusing yourselves with terms. A "Native" programming language is just the language the OS's main API is written in. E.G. Android with Java or Windows with C.
That doesn't seem like a good definition. What is the main API of an OS?

Windows is implemented in C/C++/Assembly. Android is largely C and Java. Their API implementations are probably compiled to machine or bytecode.
 
The important part is how straightforward it is to write overhead-free code in a given language. As in the overhead in resulting machine code is not much compared to what you would write in assembly (not counting assembly try-n-error which is unfair).

C++ is certainly much better in this. There are very few problems left, the most prominent one being that you cannot do integer overflow/underflow checking effectively.

Java and C# are mostly equivalent. Problems include accessing raw data (mmaped or whatever) which normally requires a proxy function and arrays of user-defined structures. Of course neither of these have meaningful compiler time computing so to make code really fast you have to give up maintainability. Compiling Java to machine code without a Jit like Android does changes nothing about this.

Python is just terrible performance wise. You cannot implement the spec correctly with a to-machine code compiler because too many things can change at any point without warning. It is a too dynamic language to do that. The existing compilers exclude certain features of the language.
 
C++ is certainly much better in this. There are very few problems left, the most prominent one being that you cannot do integer overflow/underflow checking effectively.
I actually disagree. Most compilers are able to optionally instrument integers and provide integer checking. If not, you can write your own integer encapsulations and do the checking in operator overloads. The overloads end up being highly-inlineable, so you generally only pay the cost of a few comparators and an indirection per arithmetic operation. In most cases, the branch predictor will be able to knock out conditional branching on the checks.

I built a library to do just this, and I conditionally use wrapped integers depending on the build (checked in debug; raw integers in release). Depending on your project domain, this is probably a reasonable approach.
 
Back
Top