Need advices considering coding with MONO-TOUCH - c#

I would like to know, in order to use MONO TOUCH to develop app on iOS, if it is better to learn :
Objective-C / Cocoa Touch
C# .NET
I ask for that because my boss wants to send me in C#.NET formation instead of Objective-C /Cocoa Touch and i am not sure it is the best decision
Thanks for Help !

I think that you need to determine what your higher level goal is for a decision like this. Personally, MonoTouch was the only path for me, as I am a .NET developer working at a .NET shop so my company would buy-in for this but wouldn't want to take a risk of doing it in Obj-C.
I know very little Obj-C, but I can say that everything offered in the BCL (Base Class Library) makes coding in MonoTouch easier. With support for LINQ, Generic lists, File IO, etc..., going .net seems like a pro (in my opinion).
In the end, you will be overriding the same methods and calling the same methods to do what you need to do things in iOS. However, MonoTouch wraps some functionality making it easier to do things.
Take into account that my point of view is highly subjective as I am a .NET developer.

If it's already sure that you will be using MonoTouch, you need to know C#. You will whatsoever need some knowledge of objective-c / iOS-development, because you sometimes will need to know how the functions are called etc.
UPDATE: To answer your question in the comments, it's not so easy to decide. I really like MonoTouch and it's definitive a very good way to develop iOS-Apps. Maybe you can get some information you like to know from my previous question. I would not use objective-c to develop iOS-Apps, as you can use everything that objective-c has in MonoTouch too.
WARNING (subjective opinion follows): C# is in my opinion a way better language than Objective-C and it's much more modern. So why stick with this ancient technique?
UPDATE2: Just seen your update about Android. For multi-plattform-development there are only 2-3 choices atm:
MonoTouch / MonoDroid
Webdevelopment (HTML5 etc.)
Adobe Flex
Every 3 of them has different pros and cons. But if it should feel and look native, you will stick with Mono* in the end as it is the only one (of the above mentioned) that actually uses the native libraries.

I would recommend learning both... here is why:
To use MonoTouch, you'll need to know C# and the some of the base class libraries. This is obvious.
To develop for iOS, you need to know the Apple way of thinking UI. This is quite different from the Windows way. You do not need to know much of the ObjectiveC language itself to use MonoTouch (but being able to read it is a definite plus, since you can obviously find many more samples in ObjectiveC than in C#).
So if you have to choose, it really depends on what you already know. If you know some C#, I'd go for the CocoaTouch course. If you know a bit of iOS/CocoaTouch UI programming, then I'd go for the C# course. If you know neither and have to pick one... I'd go for the C# course, since you'll also need it for the Android version of your app.

MonoTouch is a C# (cross-)compiler.
So you need to learn C# but not (all of) .NET

MonoTouch is in C# and has the added benefit of also having an android version, so porting your app to android should be fairly simple.

Related

Java Swing vs C#.net desktop database application

So I'm planning on making a little desktop application that fetches TV-series information from an API and puts them in a database. I will then use this info to keep track of which episodes I watched etc etc (A bit like a desktop version of http://www.myepisodes.com)
Now I've done some research around stackoverflow but I'm still not sure which language will be the best.
Java swing using JavaDB or C#.net using MSSQL? (or even another alternative). What are the advantages / disadvantages of the two?
All else being equal, choose the language that maximizes your programming joy.
If you're targeting Windows, use C#. If you're targeting a cross platform product, Java's not the worst choice.
If you want easier cross platform compatibility go with Java, otherwise it seems like a personal preference. LINQ is very useful for queries in C# so you might want to check that out too.
If you find you really want to use C# but also want cross platform look at developing it using Mono: http://mono-project.com
I personally find Swing to be a total pain to work with, but XAML/C# is quite nice. C#'s native events make it much easier to program an event-based UI.
LINQ is also amazing for any sort of data queries you might need.

How to use the vst sdk on the .net framework

I like making music using mostly my computer and especially love using synthesisers. There is a wide range of synthesiser plugins available online which are quite awesome. I have downloaded the VST (Virtual Studio Technology) SDK which is the platform that most plugins I know of use.
I would like to know if you can use the SDK on the .Net framework to write plugins; the only documentation and tutorials I could find is for C++ and I'm not that trusted with C++. I could learn to use C++, I taught myself C# in a week, but to use an unknown language and to learn other new concepts don't seem like a good combination.
Could anyone just give me pointers in the right direction on how to get started and even if it is possible to program it using .Net?
Regards Charl
Many beginners find VST.NET the perfect choice to start off with. It comes with some samples and with VS2008/VS2010 project templates that yield working plugins. So its a great way to start.
VST.NET provides a framework that structures and groups the VST API into manageable pieces. Out of the box it provides support for common functionality such as plugin parameters and programs.
So drop by at the VST.NET codeplex site and we'll help you get started.
BTW: To my knowledge the noise project has been abandoned and although VST.NET might not appear to be very active, I still continue to react on the questions posted on its codeplex site.
I second obiwanjacobi's sentiment. VST.Net is about the only .Net VST bridge out there that I know of and the community is great. It's an excellent framework.
https://vstnet.codeplex.com/
As for the statement: "doubt .NET platform would be adequate concerning the raw performance that a VST plugin requires". This is entirely untrue. My tests have shown that on a decent computer, .Net can very easily handle basic synthesis without even raising the CPU level above a few percent. Of course, it's not going to match C++'s performance for very complex synthesis, but in cases like this, there's no reason why you can't fall back on C++ to do the more complex stuff. In fact that is where Vst.Net excels. It would allow you to build very complex synthesis as a VST, and then leverage that in .Net.
At the same time, I think you'd be hard pressed to say definitively that .Net couldn't do very complex synthesis as well. I haven't really tried, but there's no real obstacles when you pay attention to the performance of your code, which would go for any programming platform.
On top of all that, there is now .Net Native to add to the picture. .Net Native has the potential to be AS fast as C++.
I remember hearing of noisevst and VST.NET, two C# wrappers for the VST API but I don't know how stable they are. And I really doubt .NET platform would be adequate concerning the raw performance that a VST plugin requires.
So I would recommend learning a little bit of C++. Yes, C++ is so big and complex that nobody on earth knows every feature of it. But for plugin development purposes all you need to do is to implement a couple of methods. You can start from the provided samples in the VST API. Audio DSP code wouldn't look much different if you'd use C#, C++ or any other mainstream language anyway.
If you also want to implement a GUI for your plugin, that's where the things start getting hairy. VSTGUI is simple but lacks many features. I can recommend WDL's iPlug framework but that would require a little more than basic C++.

Programming with .net

I've just recently learned C# and am interested in .net but I don't know where to begin.
I know .net is just a bunch of libraries and can be used for web programming?
I'm not quite sure what areas in .net that I need to learn?
I don't know what I am trying to accomplish with .net? But I want to learn .net.
What other things can be achieved with .net?
Thanks.
Added -
The 2D class that I finished was a C#/Winform/XNA class working with 2d objects. Though there was never once a reference about .net in class. I just learned C# which is comparable to C++ and Java and Winform = just using the tool box and hooking up controls to back end code. XNA portion was being able to use the hardware to draw primitives and manipulate data going through the model->view->project pipeline.
What part of this class was .net? None right?
You can do nearly anything with .net (the same is true for most other platforms).
You can use ASP.NET for web programming, Windows Forms or Windows Presentation Foundation for GUI development.
There are also lots of functionality for networking, database development and XML or Image processing.
But the question is, what do you want to achieve?
I know .net is just a bunch of libraries and can be used for web programming?
.NET is much more than this. It is not restricted to web programming. There are possibilities for doing Windows Applications (WPF), Web Applications (ASP.NET), Network Communication (WCF), Database Access (ADO.NET), ..., you name it. So just pick a language you would like to learn like C# and go ahead and visit MSDN.
.Net is a managed runtime with libraries. It is not exclusive to building "web" applciation or pages.
The .Net Framework is 'the libraries'.
The CLR is the runtime (where the specification thereof, is deposited into a standarization organization)
C#/VB.Net/F# are flavors of different syntaxus (how do you spell this in plural?) used to instruct the runtime, using the libraries, to perform actions in an order you define (AKA programming)
Wanting to learn .Net is akin to learning another language/gammar. If you have no previous knowledge of "language/gammar" itself, you are using this specific language/runtime to learn 'language' in general.
Hope this helps,
Sorry, but if you've just used the toolbox to hook some stuff together you haven't learned C# or programming. You've learned how to hook some stuff together, but you're obviously interested in learning how it works. Seems like you're going to have to learn a lot of stuff from scratch. There's a lot to learn...
I think your best bet to learn .Net and C# (you can't really learn one without the other) apart from following a course specific for that goal is to find yourself a good book that explains the whole picture and run through the examples in the book.
Looking on internet, asking questions, and collecting bits of examples, etc. will give you little pieces of understanding, but I doubt you'll be able to get a comprehensive understanding of programming, .Net and C# that way, simply because you won't find a big picture explanation. I find a good book gives me a deeper understanding even though I've already worked with .Net/C# since it first came out, simply because there is much more explanation of how things work and why.
Personally I really like the Pro series from Apress: have a look at Pro C# 2010 and the .Net 4 Platform
It might be perfect or not depending on your understanding of software development. Otherwise just search for C# and see if other interesting books pop up.

ArcGIS Development.Java vs .Net(C#)

I'm a computer scientist and i've been working with Java mostly to develop applications.
I just been hired in a company that makes projects with ArcGIS.
The company has hired na electrical engineer to develop the arcGIS projects.
This engineer used to customize ArcMap with VBA and lately extensions with .NET and C#.
I want to take a new path and start using the ArgGIS Engine with Java.
I want to know if this choice is right.Has any of you been developing with Engine-Java and how difficult is it(The use of JNI -for which i have little knoledge- is making it more difficult? ).
Also I have a little experience with .NET and c++ but not C#.I will have a big learning curve with this path?
Also which are the advantages and disadvantages and limitations of each method?
Hard question to answer.
The general opinion seems to be that C# is easy to learn if you know Java.
IMHO your biggest problem is going to be learning and manipulating the massive, convoluted ArcGIS object model. Choice of language is probably secondary.
My instinct is that C#/.Net is probably more popular for desktop programming with ArcGIS, so you'll get more community support with that. But I don't know. There's clearly a lot of folks using Java with ArcGIS - I suspect it's mostly server work, but I'm not sure. You might be able to figure out how popular ArcEngine with Java is by checking out the ESRI forum activity.
EDIT. You probably need to decide whether learning C# is going to be valuable in future to your employer (and your career), and balance that against some assessment of whether using Java with ArcGIS engine is unusual, and therefore more risky. Only you can answer the first question.
I absolutely in all respects suggest you stick with C#/.Net over Java. Last time i looked (take this with a grain of salt), the Java Library + COM inter-opt done with ArcGIS is pretty slow when working with certain elements (Arrays, oh god the arrays), also i am pretty sure Java will most likely be the next language to be put onto the cutting block in the near future(VB6 is now getting the axe). Also ESRI's java community is pretty tiny compared to their C#/.NET (however about 50 times bigger then their C++ :()
I would go for .NET and C#
If you know java and C++ than C# must be easy. You will just need to find your way through the .net framework that's all.
You will be safe with C# if you ever have to make some rich internet application in combination with arcgis and Silverlight (C#).

What is a good desktop programming language to learn for a web developer? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm want to learn a desktop programming language, preferably C, C++ or C#. I'm a PHP/HTML/CSS programmer and I would like to get into desktop applications. I need something pretty powerful and I would like to be able to create applications with Windows GUI's.
What would the Stack Overflow community recommend? Is there any knowledge I should have before diving into these languages?
edit:
A web programmer wants to create Windows applications and you recommend C? What's wrong with you people?!
/edit
Obviously C#.
C# will be easier to get into and will let you build Windows applications using WinForms or WPF and all the new Microsoft toys in .NET. If you know your way around PHP, you should already be familiar with the syntax, object oriented concepts, exception handling, etc.
I suggest you don't complicate your life with C and definitely not with C++ if all you want is to create Windows GUIs. They do provide a good educational experience and they are useful for more advanced things (cross platform development using other toolkits for instance) but at the price of a steeper learning curve and reduced productivity.
Also, if you are a web developer, C# is the only language among the 3 options that you can (realistically, heh) use for the web. ASP.NET is not a bad framework and might be worth investigating too.
"I need something pretty powerful and I would like to be able to create apps with Windows GUI's."
For rich windows GUIs, I'd be tempted to look at the "xaml" variants: WPF (full desktop) and Silverlight (like flash) - this will give you the latest tools etc, and a lot of styling power.
For this, C# would be the primary choice. Managed C++ is an option, but it's more work.
Take a brief look at C first, to the level of writing a few tutorial programs. C is small, well defined and the definite language definition (Kernighan & Ritchie - The C Programming Language) is only a couple of hundred pages long. Although getting your head around pointers and recursion can be a challenge the language itself is sufficiently small that it's possible to know the language completely. One of the pleasures of writing C is it's not too hard to reach the level where one can just code without having to continually refer to documentation to see how to use little know feature x or library function y. Think of learning C as putting the foundations in.
However to actually write useful applications you'll want to use C++ or C#. Which depends on what you wish to write. C# will probably score in most business-orientated cases because of garbage collection and general ease of use, but C++ would score for high performance, low level, or game domains. There's also vast amounts of C++ library code available which can be leveraged relatively easily (and pure C code too which is easily adapted). If your aim is to write something with a particular problem in mind then the availability of such could most likely offset the higher overhead C++ has in just getting things done.
By way of example on this I did a filtered search on 'image' on Sourceforge and returned the following project count
C# : 139
C++: 569
And even with something purposely more business-orientated C++ still scores higher - 'finance'
C# : 12
C++: 32
With anything mathematical or technical the score is heavily weighted against C# - 'fractal'
C# : 4
C++: 44
C : 24 <-- (C++ explicitly excluded)
This is a pretty crude analysis of course, but for example if my aim was to write a desktop fractal generator program then I'd pick C++ over C# as the extra effort involved in handling the UI in C++ would be easily offset by the plethora of example code available in C++. OTOH if I was writing a business application where there was no great advantage to having example code and lots of UI to handle then I'd go for C#.
Afterthought edit: Another reason for at least familiarising yourself with C first is that there's also Objective-C as the main development environment on the Mac and iPhone. Objective-C is C with a very thin wrapper and only really a first cousin to C++, so if you envisage that you might ever be in the position where you want to port code to or develop directly on the Mac then I think you'd find it less confusing if you at least have some feel for how C++ (or C#) builds on C rather than having to 'step sideways' across the tree.
C# vs the others really solve quite different things but given your web background and it's rapid development approach, I'd definitely go with C#
My suggestion is to learn C++. C# is good, but it will prevent you from writing portable code. If you learn C++, you got many choices. In windows you can use Windows Forms application or WPF with .NET framework. MFC is another good choice. QT is the other choice which works on multiple platforms. So by learning one language, you can write code for multiple platforms and you got a variety of GUI tookits. After learning C++, learning C# would be trivial.
All the best
C# is the highest-level language of these, which means that it's the easiest one to accomplish what you want.
Windows GUIs can be surely made with C++ and even with C, but it's harder.
definitely first go to the basics: learn C.
then go to your real goal. if you want any chance of going multiplatform C# is discarded. you'd want to go with C++ and Qt, or wxWindows.
In my opinion you should starting studiying C, to have a base knowledge about aspects like memory, file accessing. C is a low level languaje, this means that you will have more control over the way you access to operating system, but to create windows application you'll have to code a lot of lines of code. For this reason, after doing few things with C, i should start with C# with Visual Studio 2008. .Net Framework comes with a huge number of classes that makes your life easier.
Hope it helps.
Kind Regards.
Josema.
C/C++ both allow low level programming. That means that everything is possible, but even simple things can be hard. If that's what you mean when you say that you want something powerful, you should probably start with C++. It at least gives you some decent GUI libraries (gtk+ with gtkmm or qt), whereas GUI programming with C is a pain.
If, on the other hand, you want to develop applications quickly (and that's what you mean by powerful), then C# is probably the way to go.
I woudl recomend C#. It's not as powerfull as the other two, but for your needs I belive C# will be least painfull. C and C++ are low-level languages, so I think they will be a lot of work for GUI and stuff.
Save the C. To those people that advise learning C, please give arguments for that. I claim that it has absolutely no benefit to learn C rather than C++. I, unlike them, have arguments to back this claim up.
In a nutshell: C is already a subset of C++ for all intents and purposes, but it's far from the most interesting subset. It only offers a very limited insight into new proramming paradigsm. C++, on the other hand, defines a few very interesting new paradigms which, furthermore, are a generalization of all that C has to offer (i.e. iterators which are a generalization of pointers).
To reiterate: if the choice is between C and C++, choose C++.
Although I agree that C is "useful" to know it is certainly no longer essential for the majority of programmers. For me these days it's main function is that it has given me an understanding of how the underlying hardware affects program performance and behavior but that's the end of it. I haven't used it in development work for the last 9 years.
In regards to getting to grips with object-oriented development I feel that both C# and C++ will give you a firm foundation but C++ is far more flexible (and harder to use correctly) while C# is more consistent and way to go if you're going to get into .NET development. I would therefore recommend learning C# and one of the "new" .NET-presentation technologies like Windows Presentation Foundation or Silverlight. Alternatively, learn Windows Forms first but it's a bit lacking in presentation.
The only case where I would recommend C is if you are going into fairly low-level stuff like device drivers, embedded controllers or similar but in most of those cases you could still use C++.
Having come up through the languages, first C on Unix, then C++ with MFC and then C# (starting with 1.0) I think that going back in time to earlier incarnations of the language is a bit like learning Latin. Oh, probably just stolen something from Paul Graham there but I would agree with it.
C is very good if you have to have a minimal object code size, very good for embedded stuff where it's one step up on the assembly language. I'm thinking of things like a Microchip PIC etc where you may only have 1K word of program space.
C++ is very good if you can have the larger object size but still need to be able to hammer the metal directly - so things like device drivers, network stacks, etc etc. The kind of glue program that sits under everything.
An OS could end up in either of these - or more likely a mix of the two depending upon the programmer, the age of the code, what it needs to interface with, the depth of the snow outside (just one more run and then I'll write that method!)
C# is really good at the higher level business focussed user layer applications. They could be web based, client based, a mix of the two - it doesn't really matter. The nice thing about the .net family is that you have a rich library, for this layer that is important, and it is being heavily developed to be richer all the time.
As computers become more powerful the cost of the developer outweighs the cost of the processor or memory.
Go with C#, ignore C and C++. By the time you are happy with C# you won't have any need to program in a lower level language for the speed increase.
Again, another vote for C# and against C. Sure C is interesting from a technical point of view and will teach you all the details, but the truth is, you don't need to know all the details to make an application. If your goal is to make something work, which it sounds like it is, it's C# hands down. C# is the highest level of the three, which means less time fighting the language, more time making stuff work.
It sounds to me like most people are recommending you learn C so that you can eventually make better C# programs. Why wait, go straight for C# and learn it. I do think C++ is an absolutely excellent language and one day you should learn it, but there's no reason why you can't make a quality C# language if you've never learnt C or C++ - many people do that every day!
It doesn't really matter what kind of language you start with but if I were you I would do:
Start with the basics in C (It will probably be hard to understand)
Move to C++
And at last C#
I'd suggest you start with C#, but quickly progress to C++ as once you have learnt how to code generally, you should return to your roots. I'm currently studying electronics because I'm going back even further. The more you know about how and why, the better you can know about how best to get where you need to go. I think a C# programmer that doesn't know any lower level language is going to write rather sub-optimal code, but a low level programmer learning C# is going to be overly cautious of all the managed stuff. So, whatever you choose, you should consider doing both in the long run.
I would go for C#.
I've done my time (lots of it) with the other 2 and find C# 'cleaner'. You also get a rich library of all kinds of functions included in .Net. I assume that you're not interested in developing for other non-Windows platforms which might have been an argument for going for C or C++. I also assume that you don't need the squeeze the last drop of performance out of the system where C might have given you a slight advantage.
To those who say you ought to learn C in order to understand how programming really works I would say that you ought to learn assembler in order to understand how C works. I did and it does help but is it really worth the pain? To be a programmer you have to switch on your brain. Think about what you are doing and understand your tools!
My vote: C#
Learn C#.
Is good to begin with the basics, but better than begin with C I would begin with the basics of C#.
This will give you a solid foundation with the fine points of C# basics and after you could move to more advanced topics.
For example you can take a look to Charles Petzold ".NET Book Zero" here.
I recommend::
First get into C. spend some time get use to it(but not too much)
Then get into C#. that's the way you can deal with GUI things more easyily.
IDE like VisualStudio can help you a lot dealing with GUI.
If you wanna be a real good programmer of C/C++/C#, then it might be not the good way but I think you are not interested in being a Guru or something like that :)
There are a lot more jobs developing windows apps in C# than C or C++. Learn C#.
C# is a good place to start. You can get it for free and you can do some fun graphics using XNA studio (also free).
I would only learn C++ if you have a specific reason to.
If you are doing Windows programming I would recommend that you do the first few chapters of one of Petzold's Programming Windows books. It will give you a basic understanding of C and of how Windows works at the bare metal level. You don't really need to learn C. Charles Petzold holds your hand and gets you up and running in a basic C Windows program.
Learn C#...if you want to develop desktop apps.
With proper set of libraries memory in standard C++ can become as easy as managed (smart pointers). Some C++ widget libraries are as easy to use as C#.NET. However it will probably perform worse than C# due to several abstraction layers. And with C++ you need to learn non-standard libraries. With .NET most of the components that you need are standard.
C is ancient and does not have STL. It demands you to be smart, but I doubt the advantages of it.
I need something pretty powerful and I would like to be able to create apps with Windows GUI's.
Well C is pretty powerful so that would would handle that criteria but something like C# and WPF would make life so ,uch easier if you're aiming to GUI apps.
Without C/C++/C# experience start with C. Edit: Ok, start directly with C# or C++ don't lose time. You cannot seriously code Windows desktop applications with C anymore, it's just to painful.
Then move to Object oriented languages to get something more powerfull.
If you wan't to stay far from windows plateform, C# is not the better option, or check out the Mono plateform.
IMO, C# is far more advanced than C and C++, you will build big application faster. WPF librarues will give you nice UI without windows style (but only on windows systems...)
Are you planning to make gui based applications for windows? Depending on what, I recommend VB. However, given your choices, I would pick C#.

Categories