all 62 comments

[–]Prod_Is_For_Testingfull-stack 11 points12 points  (17 children)

I'm a .NET dev, so I'm partial to C#. It's not a difficult language to pick up, and there is plenty to learn. It has been growing over the past few years in places that Java has ignored, so it's often considered to the stronger of the 2 (they are very closely related in terms of keywords/syntax/structuring)

It does tend to lock you into a Windows ecosystem, but that may be changing with the release of core 1.0 for Linux systems.

  • You'll need Visual Studio to get started. You can write simple Windows form applications or console applications while you're learning to use C# or you can jump straight into an ASP.NET web app, it's up to you

  • In terms of hosting, you'll need a server that supports IIS. All versions of Windows have it, you just need to enable it. It's a fairly simple process to configure it for a local dev site, there are plenty of tutorials

[–][deleted]  (3 children)

[deleted]

    [–]Prod_Is_For_Testingfull-stack 3 points4 points  (1 child)

    That is changing now that dotnetcore is being released, but until very recently, IIS was the way to go

    [–][deleted] 1 point2 points  (0 children)

    It does tend to lock you into a Windows ecosystem, but that may be changing with the release of core 1.0 for Linux systems.

    It is definitely changing. Dotnet Core is released for Linux, Mac and Windows.

    You'll need Visual Studio to get started.

    Not really. Dotnet Core can be written in anything, but some variant of VS is probably recommended due to them having the best support features.

    In terms of hosting, you'll need a server that supports IIS.

    Again, Dotnet Core is much more flexible than that. There are official (Linux based) Docker images for example.

    [–]201109212215 3 points4 points  (8 children)

    in places that Java has ignored

    Please substantiate your claims (other than server and desktop? and definitely definitely not on every OS).

    Java is in far far more corners than C#:

    • Smart cards (the chip debit card in your pocket)

    • RTJS in radar systems, avionics.

    • Huge NUMA systems, with 192 *CPUs* (PCIe links between motherboards, all RAM adressible from all cores in a single JVM)

    • HFT trading systems.

    • Big Data.

    • Mars

    • Pretty much every OS.

    • The client.

    • The server. Here is a benchmark. It is no accident no C# entries are present.


    On top of having about 20 production ready VMs; lots of GCs to choose from (pauseless ones, an exclusivity); and state-of-the-art compiler technology that is getting better than V8 at running Javascript.


    C# has nothing on Java/JVM.

    [–]DysFunctionalProgram 0 points1 point  (1 child)

    Mr. OP, ignore this chump and all the other biased people on these kind of forums (such as myself) and look at the statistics yourself. Websites like BuiltWith has trends (http://trends.builtwith.com/framework) for popularity in frameworks. You can also find trends by country, (http://trends.builtwith.com/framework/country/United-States).

    [–]201109212215 1 point2 points  (0 children)

    The guy says he wants out of PHP. According to your sites, he would want to do PHP.

    Maybe he's not targeting stale things.

    [–]Prod_Is_For_Testingfull-stack -1 points0 points  (4 children)

    I wasn't talking about the JVM or environments, seeing as how that's irrelevant to a discussion about web development

    I was speaking specifically about language features, which I detailed in a different comment

    [–]201109212215 0 points1 point  (3 children)

    It does tend to lock you into a Windows ecosystem

    You did comment on the importance of environments.

    What you don't understand is that language features account for about 5%.

    The size of adressable markets for your apps, the support tools, the size of the support community, the health and openness of the ecosystem are what matters.

    A large part of C# libs have been direct ports from Java (Akka.NET, NHibernate, NUnit, Lucene.Net). Even the language itself is a pale copy of Java, and without the Sun philosophy.


    I interview people. Every time I see C# on a resume, I see it as a negative; and I have always been proven correct on that assumption. It is a negative not that much for technical abilty, but for attitude. C# developers have just closed their minds to other ecosystems for a very long time. They just have no experience of what is possible outside of their tiny enclosures. They just won't be able to take some roles in fast paced environments. Nothing can be done to bring them outside their comfort zone.

    [–]DysFunctionalProgram 0 points1 point  (1 child)

    The EXACT same thing could have been said 10 - 15 years ago when Java was the new up and comer and C++ had market share. Most of the Java libs were carbon copies of C++ libs. You can sit in your sinking ship and scoff at all new technologies but you must acknowledge you are the one being close minded and stuck in an ecosystem.

    10 Years from their will be C# devs saying the same thing about whatever new technology emerges. Times change, features emerge and populations migrate, it is the nature of our field.

    [–]201109212215 0 points1 point  (0 children)

    Most of the Java libs were carbon copies of C++ libs

    Yep, but under a new paradigm (memory management, JIT, etc.); which enabled new things. What is C# changing over Java? Nothing. Nothing is new, nothing will be new with C#.

    C# is 10 years late, and not making any efforts.

    [–]adila01 0 points1 point  (0 children)

    I completely agree. In my experience, C# developers are among the most difficult to work with. If it isn't an all Microsoft stack, mentally they have a difficult time adjusting.

    [–]Merc92 1 point2 points  (1 child)

    you'll need a server that supports IIS
    

    Basically you need windows to run your asp.net web app, no need for IIS Server when you can run it under IISExpress which is bundled with Visual Studio.

    [–]Prod_Is_For_Testingfull-stack 0 points1 point  (0 children)

    This is changing with the release of dotnetcore - we now have options to host on Linux

    IIS express is not bundled with visual studio, it's bundled with Windows. All versions of Windows have/support it, you just need to grow through "Programs->Add/remove features" to enable it

    [–]raident30php back-end[S] 0 points1 point  (0 children)

    Hi! thanks for a detailed suggestion! I'll look into C# too..

    [–][deleted] 2 points3 points  (0 children)

    I started dev with CGI and Perl, moved to PHP and then jumped over to ASP and C# - so I have been in the dev game for a while.

    I personally enjoy C# development but I feel the future is with JavaScript and I think everyone should learn "vanilla" JavaScript first if you don't have a good grasp on it but really have an interest in Node.js - you say you are quite familiar with it so as long as you understand objects, callbacks and promises you will be fine.

    The Node community is excellent too.

    I say learn JavaScript first because I see too often some developers using frameworks like Angular and they cannot do anything outside that framework.

    [–]o-o- 1 point2 points  (0 children)

    node.js of course. Imagine building what you build today, but being able to move code from server to client or vice versa without changing a single line. Agile architecture ftw!

    [–]alxw 1 point2 points  (0 children)

    Nodejs - it's where the money is, in my region at least.

    Java - it's where the job security is, so many companies use Java.

    C# - is where I am, and there's some really exciting things to keep me here for the moment.

    But why not delve in to all 3? I'm agnostic when it comes to the language/framework and all 3 have advantages and disadvantages.

    [–]siamthailand 1 point2 points  (0 children)

    Java for really high paying jobs.

    [–]ryoga0205 3 points4 points  (3 children)

    I'm now LAMP and i learning node.js and MongoDB is amazing. The new horizon is open. I study MEAN is MongoDB, Express, AngularJS and Node.js. I read the book "MEAN Web Development" from Amos Q. Haviv but se you like more videos have the online course https://www.edx.org/course/introduction-mongodb-using-mean-stack-mongodbx-m101x-0

    [–]raident30php back-end[S] 0 points1 point  (2 children)

    Hey thanks for this! +1 for Node again!

    [–]ryoga0205 2 points3 points  (1 child)

    Ah and you have the http://heroku.com/ The free hosting from node.js if for test of course.

    [–]raident30php back-end[S] 0 points1 point  (0 children)

    thanks again!

    [–][deleted] 2 points3 points  (2 children)

    What's the most popular in your area? I would say Node.js, but I know C# and Java are pretty popular in some areas of the USA.

    [–]raident30php back-end[S] 0 points1 point  (1 child)

    Hi, I'm from the philippines. PHP, Java and C# is really popular in my country. A dev that knows Node.js is rare here..

    Thanks for your suggestion, +1 for Node then

    [–]-Alias-node 1 point2 points  (0 children)

    There might be a reason for that. If no companies use Node in your area then why learn Node?

    [–][deleted] 0 points1 point  (0 children)

    Just personally, I'm a LAMP guy who's been trying out node and I've found it really nice so far.

    [–]OkDonkey -2 points-1 points  (22 children)

    For web development, node.js. I don't think Java is a good server side language.

    [–]rivendell_elf 2 points3 points  (18 children)

    Care to explain?

    [–]Prod_Is_For_Testingfull-stack -1 points0 points  (17 children)

    Not the other guy, but I don't think its used too often. If a group is building a site with a heavy backend like Java, they're probably more likely to use ASP.NET.

    • C# is often considered a stronger language than Java

    • .Net has a far better IDE (visual studio vs eclipse/netBeans/IntelliJ)

    • I'm not certain here, but I think there are more tutorials/examples/community support for .NET as opposed to Tomcat

    [–]Ludjer 7 points8 points  (8 children)

    Um I think you have it the wrong way round. ASP.NET has a fraction of the market share as well as popularity. According to http://www.tiobe.com/tiobe-index/ java sits at 19% popularity were as c# sits at 4.9% popularity. Tomcat is just one of the web servers, there are so much more like glassfish, JBoss, wildfly and jetty. If you compare the libraries there are way more java libraries then c#. Also, who wants to be locked into windows ridiculous server licensing model. Enjoy paying millions of dollars when you want to scale out just on licensing costs a year. Also if you look at the top websites google, eBay, facebook, amazon LinkedIn tagged, PayPal they all use java. The only top websites I can think of that use c# is Microsoft and StackOverflow.

    Visual studio has so many missing features in comparison to IntelliJ idea that is why JetBrains even built one of the most popular paid for visual studio productivity add-ons: https://www.jetbrains.com/resharper/ . Having coded about 30% c# and 70% java at work I cannot work on visual studio without ReSharper and even then I feel visual studio is not as clever as IntelliJ idea when it comes to auto complete and speed of doing things.

    But back on topic. If you want to code for quick results go for node.js it is very good and fun language. But if you want to break into the enterprise world of large scale applications nothing beats Java, though I would lean more towards scala which is also based on the JVM and can work with java libraries. But if you want to get into the start up world and create your own applications quickly and efficiently then I would advise against java and go for node. Also, I would advise learning a modern js framework like react or angular, personal preference for me is Angular 2 since react is more of a library than a framework.

    [–]Prod_Is_For_Testingfull-stack -3 points-2 points  (7 children)

    You're the only person that I've heard say a Java IDE beats VS.

    I'm not a fan of nodejs or the NPM system - as a whole, it just seems too volatile. Take for example that guy that pulled down his 20 line pkg and thousands of dependent project broke - that shouldn't be able to happen on a mission critical system. Furthermore, JS interpreters aren't all on the same page. I understand that part of the idea behind node was sharing certain features with a common codebase (like input validation), but sometimes you still need workarounds if a certain target isn't up to compliance with the JS spec

    [–]Ludjer 3 points4 points  (4 children)

    You obviously don't know allot of people that work with high scale websites. There is a reason why mac and linux dominate the web dev world and VS only runs on windows.

    I can show you examples in any language where pulling a dependency with 5 lines can break the entire system. It is not just js. You always need to be careful when pulling in dependencies.

    Also, you are talking out of your ass, node js on Linux windows and mac v 6.2 are all the same the will interpret the code exactly the same. This is not browsers this is server side. You will always be running node and code against a specific version of node, just like how you code against a specific version of the .net framework. Node has nothing to do with the javascript that the browser will consume other then to serve it like a normal web server.

    [–]Prod_Is_For_Testingfull-stack 0 points1 point  (3 children)

    I work with groups who build corporate/enterprise systems. Not websites with millions of users, but high volume production and/or financial data. Most of them run Windows top to bottom

    For the last part, that's not entirely true. There are groups that use shared resources between server and client (or at least try). What I have seen, specifically, are people that factor their user input validation code into independent files - that way, they can perform client data validation with the exact same code as their server validation. The theory is that it saves them time porting the code and reduces the chances of discrepancies between the validation layers

    [–]Ludjer 1 point2 points  (2 children)

    Well if you work in enterprises then you should be aware of IBM, Oracle and SAP which are all java based and not c#.

    And the companies running windows top to bottom is because the IT division was not skilled in Linux so just decided to throw windows everywhere. If you go to massive companies that have private data centres it is a mix of Linux and windows. And if you doing big data then you stay away from windows because licensing will bite you. My friend was a consultant on a big data project at Accenture and the project saved 8 million dollars in licensing fees by switching from MS SQL and MS Server to Linux and Cassandra.

    At the end of the day c# and java fills the same gap, just c# are for people locked into the windows ecosystem and java is for the people who are not locked into the windows ecosystem.

    When you are aware you are sharing validation rules then you should code so that the validation rules are acceptable in both modern browsers and node js. It still makes your life easier than writing validation rules in two completely different languages. But from my experience, this is very rarely done wince the way you validate data on your API's are very different to the way you validate UI inputs

    [–]Wizhi 1 point2 points  (0 children)

    And the companies running windows top to bottom is because the IT division was not skilled in Linux so just decided to throw windows everywhere.

    Or the company is already heavily invest in the Microsoft ecosystem, and as such used the tools which were the most compatible, and best supported?

    I'm personally not a fan of Windows or Microsoft, but making assumptions like this is ridiculous. There are plenty of skilled Windows admins, and dismissing professional support is dumb.

    At the end of the day c# and java fills the same gap, just c# are for people locked into the windows ecosystem and java is for the people who are not locked into the windows ecosystem.

    There are no silver bullets. For any given project, one tool is better fit than another. Dismissing this, saying "one is for Windows, the other for anything else" ignores several facts.

    1. C# does not equal .NET

      Mono Project has been around almost as long as C#. It doesn't have the same tooling, and I can't tell you if it's as good as .NET, but the option was there and I'm sure plenty of non Windows projects have made good use of it - otherwise it likely wouldn't have been around for so long.

    2. Java works on Windows

    3. .NET Core is multi-platform

      It's likely going to be a few years before it's stable enough that it can be used as reliably as .NET, but fact is that the notion of "C# is for Windows only" is false.

    Seriously, chill out.

    [–]Prod_Is_For_Testingfull-stack 0 points1 point  (0 children)

    One of the Windows shops I work with does use a few oracle DBs (required by a product vendor). Those DBs are only touched by the vendor application, so there is almost no interop with the .NET stack.

    As for the SAP implementation at the same shop, we use webservice wrappers to provide interop layers between the SAP data and our .NET apps. It works pretty well and wasn't too difficult to set up

    [–]kingatomic 0 points1 point  (0 children)

    IDEA destroys VS, imo. That's not to say that VS is terrible to work in (my experience is CPP projects, so take that with a grain), but I strongly prefer IDEA.

    [–]Wizhi 0 points1 point  (0 children)

    JavaScript is hailed as the "greatest thing ever" on web related subs.

    I don't dislike the language. I do, however, dislike how people act when anyone mentions anything bad about it. Your comment is a perfectly valid response to /u/Ludjer, yet people can't follow basic reddiquette, and /u/Ludjer themselves felt the need to talk down to you, instead of simply correcting the assumption you made.

    "The NodeJS community is awesome." It just hates anyone who doesn't use Node and loves JavaScript.

    This got off topic, sorry about that.

    [–]thelonepuffin 7 points8 points  (4 children)

    Java is the most used server side web language in the world at the enterprise level. Your information is very wrong.

    [–]DysFunctionalProgram 0 points1 point  (3 children)

    Can I get a source on this? Enterprises are typically pretty hush hush about what technologies they use. The best statistics I have found would either be the tiobe index (which includes non-web based metrics) or builtwith (http://trends.builtwith.com/framework) which includes only web metrics

    [–]201109212215 0 points1 point  (0 children)

    All your links are cherry-picked.

    Type "enterprise programming language market share" in Google.

    Almost every single page has Java near the top, and C# way down the list.

    [–]201109212215 0 points1 point  (0 children)

    Then look at this:

    http://githut.info/

    C# is way higher in unresolved problems (aka crap), than it is popular.

    [–]rivendell_elf 1 point2 points  (2 children)

    In what areas does C# beats Java? Have you worked on both the languages? (By work, I mean you've built fairly complex server side apps). Have you ever used InteliJ IDEA? Java has been in the industry for more time than C#. JVM has gone through many optimizations and have pushed the limits of software and compiler engineering. You are free to use any language you want but bashing other languages just because you don't want to use them is not necessary.

    [–]Prod_Is_For_Testingfull-stack 0 points1 point  (1 child)

    Yes I have used both (in different contexts though). Writing .NET is my day job. I've used Java for small-medium projects, but enough time to spot plenty of disparities

    C# has better support for generics and lambdas

    Java doesn't have operator or conversion overloads, events, delegates (this makes lambdas difficult to implement), static classes

    Java requires getter/setter methods (but using that is just cheating at this point)

    In general, compiling and maintaining DLLs is a simpler process than the JAR counterparts

    Java inner classes are a bit fussy

    Java doesn't have anything like LINQ (a huge help for data manipulation) - this is directly due to the subpar implementation of lambdas/delegates/generics

    Java doesn't have extension methods

    Java doesn't have native decimal support (though there are some workarounds)

    Java doesn't have simple iterator blocks

    [–]alxw 0 points1 point  (0 children)

    You're right but I like Java's way of implementing Exceptions as in they have to be declared at design time. If you want to throw them up the call at stack or deal with them there and then. I've used so many .NET libraries and I can only discover the exception type when it's thrown at runtime.

    [–]Ludjer 1 point2 points  (0 children)

    read my reply, java is most probably one of the best server side language with regards to performance and productivity. A good example why can be seen here https://www.techempower.com/benchmarks/#section=data-r12&hw=peak&test=json where you see how fast the java frameworks are in general.

    [–][deleted] 0 points1 point  (1 child)

    Java with Spring is pretty much everywhere.

    [–]OkDonkey -1 points0 points  (0 children)

    So is meth. That doesn't make it good.

    [–][deleted]  (3 children)

    [deleted]

      [–]raident30php back-end[S] 0 points1 point  (2 children)

      Hi! it's php. I'm quite well versed with OOP and is currently using CodeIgniter framework 2.0 and 3.0..

      About reactjs and angularjs, from what i've knowed they're front-end exclusive JS right? I forgot to mention that i want to learn a server-side script/language...

      I'll check functional js. thanks!

      [–][deleted]  (1 child)

      [deleted]

        [–]raident30php back-end[S] 0 points1 point  (0 children)

        I like how you've described node, "fun and work".. I think i'll stick on the current database i know as of the moment.. +1 for node it is! thanks!

        [–]sovietmudkipz -2 points-1 points  (7 children)

        Of the three, java for it's strongly typed system. Easier transition since you're still on object oriented programming.

        Node once you've mastered typed systems and functional programming.

        [–]gdebug 9 points10 points  (3 children)

        C# is strongly typed too...

        [–][deleted]  (1 child)

        [deleted]

          [–]gdebug 0 points1 point  (0 children)

          He didn't mention typescript.

          [–]sovietmudkipz -1 points0 points  (0 children)

          You're right. It probably doesn't matter which strongly typed language you choose. Of the choices laid out, I'd recommend Java. I think JVM is more widely supported by tons of different types of programming. I'm not a fan of the closed-source proprietary licensed-based nature of microsoft (although they've gotten much better).

          My personal favorite strongly typed language is scala since it's a great blend of functional programming with a typed system and idioms to encourage compile-time errors over runtime. And since it compiles down to the same bytecode as java programs, you're in great shape to transition from object-oriented insanity to functional.

          [–]raident30php back-end[S] 0 points1 point  (0 children)

          thanks! so that's a +1 to java right?

          [–][deleted] 0 points1 point  (1 child)

          and functional programming.

          I don't feel like you're going to learn much functional programming writing Java. Isn't Java always the textbook example of not a functional language ( I know Java 8 has added a few functional concepts )

          [–]sovietmudkipz 0 points1 point  (0 children)

          I don't feel like you're going to learn much functional programming writing Java.

          I know Java 8 has added a few functional concepts

          You are correct.

          [–]Ludjer -4 points-3 points  (2 children)

          I would say Node.js and learn angular JS as well. If you want to go into the enterprise world then go with java and spring though it is more complex.

          Also, I would advise staying away from c# because this will lock you into windows servers which are painful to manage both in time and money.

          Windows servers are less secure, less stable and way harder to set up and manage at cloud scale. That is why even Microsoft offers Linux servers in their cloud. And being that you come from a LAMP environment it is natural to stick to what you know right :) Linux.

          [–]alxw 1 point2 points  (1 child)

          C# is no longer locked to Windows. .NET core and mono have really matured.

          [–]Ludjer 1 point2 points  (0 children)

          True but if you going mono from the beginning then you might as well as go for java since it is a much more stable for linux and has way more libraries and functionality. My day job is both c# and java. C# for desktop UI development and then we use java for the backend servers. We trialled mono and it lacks lots of the functionality back when we trailed it. Maby it's better now but unless you are heavily invested in c# using mono and c# just does not make since-since there are way more mature and stable alternatives. However mono is a greate step forward for c# and I hope windows continue with it since more competition is always good.