Sign in to follow this  
Kaven Marenger

Java or C# career and future of programming

Recommended Posts

I want to start back programming again, study hard and get a job later on I am really serious about this and I have all my time for the next year, I may study 10hr's -15hr's a day etc ( am not joking ) I already did some C++ 10 year's ago as a hobby and I remember most of the concept like pointers and others memory stuff's etc here is my question please help me...

Should I learn Java or C# today in 2012 ??


I need advices because I talked with some experienced programmers and some told me to go with C# others with Java because it's "safer" in the long run because it support android dev. bigger on mobile and more cross platform ... they told me .Net is at a crossroads with Windows 8 releasing soon with Metro Apps dev. who can be created with many languages C++ C# etc but if you want just html5 and javascript etc they said too that xaml could die because that markup could be replaced by Html5 ...

some others told me to go to C# because I have a good networking and system admin. knowledge ( domains, dns, dhcp, active directory, exchange, sharepoint etc ) so they said that C# is a better fit because everything will work together better and I'll be more marketable... but in a way I'll also be "lock-in" with 1 vendor only Microsoft etc and since they aren't big on Mobile yet they worry .... most of them told me mono was great but not a real alternative to java on mobile and cross platform so I need advices

Thank you very much don't be affraid to go deep in your answers I need it

Tyffa

Share this post


Link to post
Share on other sites
Actually C# is now cross platform. Take a look at the [url="http://www.mono-project.com/Main_Page"]mono-project[/url]. They've made an open source cross platform implementation of the .net CLI. Mac, windows, linux and I think sparc and BSD are supported. They also offer 2 proprietary ports of it to android (monodroid) and iOS (monotouch), these cost $399 per year each though.

I don't think theres really any advantage of java over C# or vice versa, both are pretty equal languages now. I do think visual studio is probably the best IDE I've come across for anything so far though.

Is there any reason why you aren't continuing with C++. Android, iOS and windows phone 8 all support it. Edited by 6677

Share this post


Link to post
Share on other sites
It doesn't matter which language you learn now. Programming is about implementing algorithms. That's the skill you need to be developing. So just pick whichever language you want now, learn how to use it, and get some experience by making progressively more complex programs. That's how you develop your skill as a programmer. Later on, you'll be able to become proficient in other languages more quickly.

Share this post


Link to post
Share on other sites
15 hours avaiable... Java or C#?
Easy answer, 7.5 hours a day of C# and 7.5 hours of Java.. interview .. job .. profit.

You could also try to find some C++ audio book and keep it going while you sleep.

Share this post


Link to post
Share on other sites
You are quite safe with either choise.

Being limited to Windows only is not a problem, since most PCs are Windows anyway.

On the other hand, phone and tablet sales are getting bigger and will eventually outsell the desktop + laptop market, if they haven't already.

Which doesn't matter shit, as the platforms get closer and close together. With Windows 8 you will be able to program for all of the major platforms in C++, which means it's just a matter of time before somebody ports their favourite language. [url="http://xamarin.com/"]Xamarin [/url]let you program in C#/NET for Android, iOS, Mac and OS X, but you have to pay them a lisense.

You should consider salaries as well. Since it's more difficult to program in Java (since it's older technology and can't just introduce radical new stuff - for backwards compatibility), Java programmers tend to have higher salaries, but there seem to be more .NET jobs.

My personal preference is .NET, but you can't go wrong either way. Neither is going away anytime soon.

Share this post


Link to post
Share on other sites
Yeah but the thing with Java that worry me is the lack of UI and windows support I mean you can do mostly everything C# can do and all that with springs and the others librairies but it seem C# is just better for UI/desktop apps on windows and Visual Studio is just night and days ahead of Eclipse and Netbeans from what I heard is that true ???

the other thing is with Java I will be coding/maintaining mostly what ? backend server code ?? I heard Java isn't used much for desktop apps and more for legacy theses days but what interest me a lot is it's potential with android and the cross platform

any great books you guys recommend to start learning C# 4.0 ???

Share this post


Link to post
Share on other sites
[quote name='Tyffa' timestamp='1344192636' post='4966424']
Visual Studio is just night and days ahead of Eclipse and Netbeans from what I heard is that true ???
[/quote]
Which IDE is best is normally a matter of opinion. Personally I've installed eclipse and couldn't make head or tales of it (was going to use a python plugin), I've only used netbeans for HTML/CSS and it seemed alright for that but not tried it for programming.
Visual studio is probably one of the best things microsoft has come up with, it is an excellent IDE its just a bit expensive for the full version, for most purposes though the express versions will be fine.

Share this post


Link to post
Share on other sites
For UI, and desktop integration, .NET is the go, no argument there.

However, there are a few projects in the Java world that I'd look at with great interest. First, there is XML-based SWT, being developed for eclipse. It is called [url="http://wiki.eclipse.org/E4/XWT"]XWT[/url]. The other thing is [url="http://www.oracle.com/technetwork/java/javafx/overview/index.html"]JavaFX[/url], but it's quite new and I don't know if anybody uses it. Right now, C# offers the best experience for writing Windows Desktop applications, as it integrates nicely with COM and can invoke native code.

Now, since most people here probably haven't worked on bigger projects with both VS and Eclipse, their opinion will be mostly based on what they've used on a daily basis. Simply put, comparing VS against any other IDE that I've used (I haven't X-Code), VS simply pwns in the debugging department, so far as .NET is concerned. There simply isn't any basis for comparison. VS debugging in C/C++ is inferior, but it has greatly improved in the last version (2010).

Code completion and template-completion without plugins is somewhat on par with eclipse. I don't know anybody that works professionally on .NET without plugins like ReSharper, JustCode or CodeRush. Anyhow, vanilla code-completion in eclipse for Java vs in VS for .NET is on par.

Coding experience is eclipse for java is superior (without plugins). You've got all sorts of navigation (VS only got ctrl+, in 2010), and the shortcuts for equivalent navigations are more convenient in eclipse than in VS. Compare alt + left arrow and alt + right arrow for navigating to the previous editing point, vs ctrl + - and ctrl + shift + - (if you've got multiple keyboard layouts, this might conflict with the layout switching shortcut). Most of the default keyboard shortcuts in VS (no plugins) suck (who the fuck thought to make Ctrl + e, Ctrl + C commenting in c# profile? vs ctrl + / in eclipse). Sure, you can reconfigure everything, but the default sucks. And why isn't [url="http://submain.com/products/ghostdoc.aspx"]GhostDoc[/url]part of the built-in VS functionality?

Now, VS + plugins for .NET is unparallelled. Extensions provide easier navigation, smarter templates, and tons of refactoring. The thing you are most likely to use the most in a big codebase are the navigation features. There are some clunky attempts for free extensions that provide basic navigation in VS, but they are nothing compared to the commercial offerings. Most of what these plugins offer in VS can be found in Eclipse for Java with the default installation, but the features are clunky and half-finished. Take navigation, for example: you can navigate to resources (understand: files/projects), but you have to put every letter in the right order (implemented as string.startsWith). You can search with all caps (i.e. for abbreviations - if you want to go to MyBigCaseClass, you can type MBCC), but guess what: you can only enter them in order.

So far as refactoring goes, you've got everything in eclipse, but they've managed to make the menus overcrowded and confusing. For the time that you'll spend finding what you need in the menus, you'll refactor the code by hand. Both IDE-s have "quick-fix-on-the-spot" functionality (in VS something like alt-shift-f10 IIRC, and in eclipse ctrl+1), which is nice.

For graphical designers - I haven't used one in eclipse. There is supposed to be one built-in for Swing and SWT, but it doesn't launch automatically or in any way obvious, so I've never tried it. In VS, the WinForms designer is legendary. It works. The XAML designer is very fragile, and I haven't seen production code that doesn't break it. Sure, you don't need a designer for XAML as it is very easy, but still. Now computers are more powerful and you won't notice it, but the XAML designer is terribly inefficient, and it used to bog down dev machines at work. The ASP.NET designer is slow, and might as well work, but I've almost never used it, as I worked on stuff that can't be handled by it. But my scenario was quite rare (unless you do a CMS or something bigger, and probably not even then).

For the types of work - I've only worked professionally with .NET. My experience with Java is mostly doing my MSc dissertation - an IDE based on Eclipse for an in-house language. In .NET most of the jobs are about building trivial web sites or supporting some internal network. For Java - my friends work at Cisco, banks, SAP Labs, etc - big corporations, where you mainly support Indian code and gems (no offense meant). Sure, you can do apps for Android, but those tend to be start-ups and small firms. It can be risky, as the competition is fierce and there is no guarantee your app/game will sell in the sea that is Android Market.

If, by some chance you want to go the academic route, Java is perhaps your only choice besides C++. At least here in the UK there seems to be some irrational dislike of Microsoft, bordering on hatred. As if there isn't any greater pleasure in life than bashing Microsoft. You will hardly find any academic paper that uses anything other than Java, unless performance is important (c++), or, in some rare conditions in AI, prolog (although they rewrite it in Java/C++ for performance). Some papers might touch Ada, but those are usually around reports for failure in NASA and other US-government-financed (since they are in public domain), very old, projects.

Share this post


Link to post
Share on other sites
I program in C++, C# and Java for different reasons, pick one based on what your trying to achieve long term and the other languages should fall into place when you attempt to tackle them as they are pretty similar.

I am a big sideline supporter of the mono project, decent cross platform C# and .NET would be amazing, considering Java's biggest strength over C# is the ability to "Write once, run anywhere" if you could say the same thing about C# think about what this would mean.
A big blow to the gut for me was Xamarins choice to distribute the MonoDroid and MonoTouch projects as proprietary software for an outrageous price (if you ask me), but I guess you can't have your cake and eat it too.

Share this post


Link to post
Share on other sites
dilyan_rusev : so if I have a good understanding of active directory domains and dns,dhcp, exchange, sharepoint and all the microsoft networkings and system administrators stuffs it would be better off for me to learn C# to complement that ??? I'll be more marketable in a way than Java no ? since it all goes together and I'll be able to build desktop/metro apps that goes with the system admins and network stuffs ???

but Java goes very well with Linux and all the open source stacks of networking too like oracle ibm etc What do you think ?

thanks for everything again please go on if you want

Share this post


Link to post
Share on other sites
Both options are good. Maybe look at what you want to do first? Java is in for mobile phone programming, while the c/c++/c# route is still the mainstay for PC/console programming.

-Clee

Share this post


Link to post
Share on other sites
Well, you don't have full mapping for active directory (System.DirectoryServices), but at least IIS is somewhat covered. What is cool is that you have *really* easy access to COM, so you can access anything that is not directly included is very easily accessible.

For a windows sys admin, .NET is much better. I can only say PowerShell :) If you do intraweb as a sys admin, you can manage SharePoint as well. If you manage the build of a company, both Nant and MSBuild are very easy to use (and, of course MSBuild is evolving more rapidly).

If you like working on enterprisey stuff (IBM/Oracle), I think Java is better. The problem with these jobs is that they do require some experience. It obviously doesn't matter *which* stack - a friend of mine told me they'd hire me at Cisco even though I have no professional Java experience. So your goal No 1 would be to gain some. I think it is easier to find a job in .NET, especially as a sys admin, but not necessarily one that you like. As with any job interview, you just have to know how to cell yourself. You know, the popular proverb goes shoot at the starts, and even if you miss, you will still be amongst the starts :)

Share this post


Link to post
Share on other sites
so you recommend me to stick with .Net because of my expertise with Microsoft Networking already ?? it will work better together as a whole and I'll be more marketable at more places that's what you say ?? that's what I think too but look at what the author Harvey Deitel told me about Java and C# in a email :

"" C# and Java have similar capabilities. Most professionals would say that they're almost equivalent in expressive power. I wouldn't say that you can do exactly the same things in each language, but their capabilities are very close. Again, once you master one of these languages, you'll be able to master the other easily, but it will still take time. ""

What he mean in almost equivalent in expressive power but he wouldn't say you can do exactly the same things in each language etc he mean desktop apps and windows dev is better off with .net and all the server back end stuffs is better off with Java for the open source technology like hibernate springs etc ???

thanks a lot for the important replies

Share this post


Link to post
Share on other sites
It really doesn't matter. With experience and practice in software architecture, I firmly believe that you could learn a new language very quickly. Yes, there are subtle differences, but the higher level concepts remain the same. Structuring code in a way that is simple, works, and is easily extendable is what you should be focusing on. You said you had experience with C++, then I would stick to that and really practice on creating progressively tougher projects.

I would also learn about OO paradigms and patterns. Get familiar with the tools such as the IDEs and debuggers. All of this comes from practice. The language is just a tool. Depending on the application you're building you would choose the appropriate language and tools that will make the job more efficient... but your higher level skills will still be the most important thing. Edited by french_hustler

Share this post


Link to post
Share on other sites
Most libraries for .NET web development are open source, too. Razor, MVC, Entity Framework, Ajax Controls, ASP.NET, the best patterns & parctices collection of libraries are all open source and hosted on codeplex. For everything in Java you have an alternative in .NET (or a direct port). Microsoft are changing their poicly towards the open source model so far as web development is concerned (a lot of their pet projects are hosted on github). There are a lot of cool people there that are trying very hard to make more and more stuff open source, and to create a community. It is still true that you can't easily update the core libraries (ASP.NET), but recent versions of VS have made it very easy to update auxiliary libraries (MVC, Entity, Razor, etc) via NuGet (so that you don't wait for the next release of VS for a bug fix).

To say that it is "easy" to learn either .NET or Java is a huge understatement. C# and Java, as languages, are very similar, and just like any language syntax, real easy to learn. But both .NET and Java as frameworks are freaking enormous. You will probably never know all the APIs, especially with the speed at which they keep eveloving, especially .NET. What matters, as I said, is experience. If you've used Ruby on Rails or Django or CakePHP, then you'll know what to look for in both Java and .NET. These classes of frameworks simply can't be implemented that differently, so if you've used *any* windowing toolkit, you can reasonably excepct how to use WinForms/Swing. That is why people keep saying that what matters is experience. As you code, you get to understand how things are generally structured in different classes of frameworks (all MVC frameworks share a lot of features, so if you know one very well, you can reasonably fast learn any other MVC framework).

I am not telling you to choose .NET. I'm saing that for windows sysm admins .NET makes much more sense than Java. It is because a lot of Windows components are exposed via NET and COM, and as I said, COM is extremely easy to use in .NET.

Whether or not you are more "marketable" depends on how well you are able to sell yourself. That means knowing how to do job interviews, knowing how to approach employers, knowing how to structure your CV, knowing how to write cover letters, knowing that it is important to research each potential employer and employ customsized approach. Your first taks is to get past the HR sieve - if you are good, the IT people are gonna recongise you. In my experience, smart developers can "smell" other smart developers, so if you are good and get to be interviewed by developers, you almost certainly have to job, unless you screw up something real bad.

The most important thing in order to impress another developer is competence. You get that with experience. Experience is gained by doing and completing projects. .NET or Java doesn't really matter, cause you have to learn a lot of company stuff anyway when you join, so unless you go for senior position, the time for you to "switch" will be neglible compared to the time you will need to master the compay's code base and internal rules. Pick whatever you like the most. I started with .NET cause I was familiar with Visual Studio from doing C++ programming. You may pick up the thing you feel you know most about, and will allow you to look for the kind of jobs you like.

Share this post


Link to post
Share on other sites
If you intend to study the best bang-for-your-buck language, that would be JAVASCRIPT (or more specifically , ECMA-Script). At this point in time, it is the one language that is truely cross-platform viable and runs across a variety top-tier technologies. Its an asset in about every playing field.

Core reasons:
1. Cross platform. It runs in every web browser, or web view when packaged into an application, and even as mobile applications. and you can build awesome and complex user interfaces easy, interacting with whatever your host container provides (and more). The ui can be defined in such a way that it looks the same, regardless of what system its on. Or, it can use model form elements to represent other things.

2. Even complex 3d games with hardware acceleration are possible in many browsers (and/or by packaging the browser as a view). WebGL and Canvas will take you far on this route.

3. Its derivative languages include the primary language for AS3 (flash), and one of the primarly languges used by Unity3d (which is pretty much the shit)

4. It is a powerful and flexible web server with native websocket support (see nodeJS)

5. Native json (obviously) support means that it readily communicates with most key/object stores used for big things such as MMO's (read: mongo, couch)

And as a more obvious note a strong JS background will make you indespensible to the web and marketing sides of the company.

EDIT: In short, its a language thats mandatory in almost every programming team. And thus, in my mind, gives you the highest probability of employment should you be really good in it. However, its one of those languages that everyone knows, but few know well, so there is a HUGE disparity in industry pay, but lots of demand. Edited by Richard Cesar

Share this post


Link to post
Share on other sites
Richard Cesar : are you saying that .Net is on it's way out with Html5 and Javascript being the future of windows development for UI in Windows 8 metro ??? Lot's of peoples told me that WebGL may not be 100% supported in IE10 and that you won't have 100% access to the .Net framework as it is to develop Metro apps only but you will be ok for desktop apps, I think they limit you somehow for the Windows Store ( am not 100% sure about this )

a good Java programmer told me that Java was the way to go for backend stuff's on server because jvm based languages may dominates on the cloud while running on free linux vm's, and that .Net as the edge on everything front end but that both languages could do mostly all the same things. I've been advised to learn .Net because I already have MS expertise with Active Directory domains and all the rest of the MS networkings stuffs he said to me I'll be able to build great program and combine them with Powershell who could give me a edge on the job market but on the other side the experienced Java programmer told me Java as the edge on Mobile because Microsoft isn't in the game yet againt apple/android ... but what worry me about Java is desktop apps development .Net is stronger there and it seem that most big companies stick with Asp.Net and MVC 3 for the big web project so it seem pretty safe in the distant future

But what about Mobile ?? and will Metro really succeed and be a game changer ??

Share this post


Link to post
Share on other sites
[quote name='Tyffa' timestamp='1344404675' post='4967262']
But what about Mobile ?? and will Metro really succeed and be a game changer ??
[/quote]

It is impossible to make such a prediction, Microsoft has failed before but when they start pushing hard at something they have a good chance at succeeding.

The most interesting part about Metro would be running the same apps on your windows desktop and your windows phone, for that to work people have to actually buy Windows phones though. (Without that integration i'd expect metro to die off), JavaScript is still one of the most used languages though (lots of web frontend work is written using it these days).

For Mobile it is mostly Objective-C and Java these days but C# does work (Using for example Xamarin) and is used for quite a few iOS and Android apps aswell, C++ knowledge can also be useful on mobiles and for alot of things wrapping a html/javascript app in a webview can cut developmentcosts greatly.

Share this post


Link to post
Share on other sites
Windows 8 UI (it is no longer called metro) is meant to ship with .net 4 preinstalled. I don't think .net is going anywhere any time soon.

Share this post


Link to post
Share on other sites
yeah but what if windows is going away ?? google is activating millions of android devices and apple is selling so much ios devices they say they sold more than pc etc what if that trend continue for the next 5-10 years... peoples seem to prefer mobile over a desktop and since mostly 80% of the peoples out there doesn't need the full power of a high end desktop where are we going ??

Share this post


Link to post
Share on other sites
Sorry, but pretty much everyone in a cubicle uses a PC and the overwhelming majority of those run windows. That's not changing in 5-10 years.

And frankly, my workplace is using C# to develop iOS and android apps as well.


But [b]it does not matter[i]. [/i][/b]Pick one. If you're wrong, then spend the [i]month [/i]learning enough of the syntax to be employable in the other (more likely, whatever the successor is to C# in ~5 years). Syntax is largely irrelevant in the timeframes you're asking about. Edited by Telastyn

Share this post


Link to post
Share on other sites
Oh, my, I don't see Windows (or the classical GUI paradigm) going away anytime soon. We are simply seeing a shift in form factor. The Internet of Things is the next big thing according to many academics, but it is far, far away. Typing on a physical keyboard is still the best way to enter text. Whether it is connected to a phone or some other portable device - it doesn't matter. And don't forget all the applications that you use on a daily basis. True, end users definitely don't need a full PC, they probably don't even use half the functionality of their phones, but as a programmer you don't have to worry about it. People are using more and more *software*, which gets created by... developers. Web sites are still going to be consumed, businesses will still need intranets and accounting software, games will always be played, people will still waste money on apps. All of these feature classes of frameworks (or types of frameworks) that are very similar in terms of the way code structure and general coding, regardless of programming language/runtime environment.

And like Telastyn said - just pick something and start programming. In my opinion, it doesn't really matter whether it's python or java or .net or anything else for that matter. Experience in programming is transferable, only the little mechanics aren't.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this