> We have a better IDE than the Java guys
Biased Java guy here. Completely disagree. Yes VS lets you build nice UIs with drag and drop. But if you compare bare bones Intellij IDEA to bare bones Visual Studio, Intellij IDEA wins everywhere else. All things being equal (that includes programming languages), you can be more productive in Intellij IDEA because its got the fundamentals down and has intuitive shortcuts for doing everything.
Of course I haven't used VS for about 5 years. Keep that in mind. But back then IDEA was light years ahead and .NET devs still thought VS was better.
I can check-out a Java project that contains pom.xml using the big 3 Java IDEs out there (Eclipse, IntelliJ, NetBeans), compile, build, run unit-testing, integration-testing, navigate my codebase like crazy.
But you know, I'm gettin tired singing the same choir of Java. .NET guys can sing how great their C# languages and VS.NET are but we know Java ecosystems win hands down End-To-End; we got it cover from distributed systems, big-data, enterprise, "service oriented", dependency management, build, validation (findbugs, checkstyle).
Eclipse + essential plugins are more than enough for me (albeit I'm using IntelliJ these days) and it's free.
Those who only occasionally use Java when they have to... tend to find maven incredibly confusing to get working properly.
I was reared on Java, but at this point I don't think I could go back. C# is just so far ahead of java in terms of language design and features at this point, and Linq is bloody amazing. It's far easier for me to transfer the ideas in my head to my C# code than pretty much any other language I've used at this point, excepting Python for simple algorithmic problems.
1. I compared bare-bones IDEs because I know resharper levels the playing field.
2. When I said, "All things being equal (that includes programming languages)" I meant I feel that C# is a better language, but I'm choosing to ignore that so I could compare IDEs apples to apples.
Drag & Drop? Lack of end-to-end support? Maven?
Just all showing your lack of experience in .net
I wouldn't mind if they were decent criticisms but they're not
Back in 2008-2010, I used Eclipse exclusively with Maven (and m2clipse), FindBugs, Checkstyle, PMD, Hudson (Jenkins nowadays), Spring, GWT, with some exposure to HBase and Hadoop. I never had to wrestle with any licensing issues at all. If I want to use something I would go to the internet and download them (IDE, plugins, tools, libraries or whatnot). They're also high-quality grade tools and not toys or something with serious limitation that forces you to buy the commercial offerings.
Feel free to invalidate my opinions. Love to see a better version of NuGET. Love to see VS.NET Express to support plugins. Love to see what great cool plugins exist for VS.NET. Love to see any heavy-weight framework/libraries from .NET that are being used in large-scale and in may areas. It wouldn't hurt if you can list them here for the benefit of everybody else as well.
PS: Mylyn is a very underrated tool. I heard they're going to port Mylyn to VS.NET but haven't seen it from their product page yet as of today.
I don't see what a lack in .net experience has to do with anything. I'll be the first to admit C# is a better language than Java. This is a comparison between two IDEs. I've used both. I was shocked at what VS couldn't do.
Look at the success of Xamarin moreover their tools that can be used to create systems in Mono in F#, C# et al hosted on Linux with Nancy behind Nginx using Postgres.
The OSS ecosystem is growing too look at Edge.js for a good example of some innovation where C# and F# can strengths can be utilised in conjunction with other ecosystems with more focus on web.
It may not be perceived as trendy but there's plenty of developers familiar with that ecosystem. If you're in London for example finding decent C# devs is not a tall order.
Wait until your operation gets bigger and requires monitoring and all the goodies specifically for IIS/Windows Server.
I'm sure someone will just "lol, use your MSDN (or whatever it is now) subscription", and when you have that and it's being paid for that's fine, and the tools are nice. But it's way too much for small shops to bother with, IMO.
In any case, I'm not sure that many (any?) product needs could dictate choice of language in the vast majority of cases. Yes, if you need to do a ton of realtime stuff then maybe think about Node etc., but most people want the same standard stuff.
Getting something up & running is more important that everything else put together (except maybe determining what that something is.)
It's hard enough to get from "thought" to "thing" without worry about all the details. For an MVP, almost any technology can do almost anything you need. So just do it.
Although not ideal, you can always refactor, rewrite, rearchitect, or redeploy. But unless you have a time machine, you can't go back and do it again. So listen to untog and use what you already know.
"Never use a new language for the first time for a project you love or that's important to you - you'll end up hating both the language and the project."
[0]: http://matt.aimonetti.net/posts/2013/08/27/what-technology-s...
She wasn't right about lack of concurrency. Go, Scala, Python, hell all of them I guess can do "concurrency". They all have facilities to launch concurrent requests/actors/callback threads/other processes.
Now maybe what she was going to say (and her "how much pain and when" kind of hints in that direction) is that once you start handling large scale concurrency, things get very complicated. Anything that lets you share memory will eventually bite you back in terms of debugging and downtime.
Erlang's concurrency is unique because its concurrency units are isolated. They are as isolated as possible. Each has its own memory. Garbage collection can happen concurrently. One such what they are called process will not damage or interfere with other processes. That is invaluable.
Erlang's concurrency just like (Go's and Rust's I think) is also a mix of both CPU and IO. So behind the scenes Erlang spawns an operating system thread for each CPU core and then it dynamically scales your concurrency units over them. You need to run better, just add more cores.
Another (and this should be the main differentiation) is fault tolerance. This was and is the raison-d-etre for Erlang. Nothing practical out there matches it. Processes can and will crash and Erlang has standard ways to supervise and restart. Even crazier it provides built in facilities to reload the code while the system is running. That is of course possible in other frameworks and languages but in Erlang is baked in and battle tested over many years.
That sort of makes Erlang a unique tool. It doesn't come without trade-offs. It doesn't for example has terribly fast sequential speed. So if your task is to multiply matrices for example, or computer lots of numbers. Erlang won't be the fastest in that regard. It is also a functional language. It is beautiful I think, especially if you like pattern matching, but some people don't like that.
But if you don't like the syntax, there is way out, the same Erlang virtual machine called BEAM can run other languages. For example a nice new one is Elixir http://elixir-lang.org/ check it out, it is rather similar to Ruby in syntax but includes all the concurrency features from Erlang.
As for resources I would recommend the wonderful and funny online book called:
Learn You Some Erlang For Great Good http://learnyousomeerlang.com/
http://www.theerlangelist.com/2012/12/yet-another-introducti...
It is kind of like Node in that it is very easy to do concurrent stuff, except instead of nested callbacks and all that jazz, you write 'processes' which are designed to share nothing. They run akin to OS threads in that one process crashing won't bring down the whole system (unlike Node). As no state is shared it also means that they can easily (i.e. it is built into the VM, and switched on by default) be scaled up to run over many cores. If you are interested, you might want to look at Elixir (a language built on top of the Erlang VM) which has a more Ruby-esque syntax: http://elixir-lang.org/
EDIT: Should also point out that I think "Jessica's" comment was just trolling, however it isn't far from the truth :)
But it's ridiculous to say that "only Erlang can do concurrency". Many other languages do concurrency very well in slightly different ways (Clojure, Scala and Go, for example).
IMO, Groovy is absolutely one of the top platform choices a startup could make. We've been using Groovy and Grails at Fogbeam for 2+ years and haven't regretted the decision at all, FWIW.
Edit: I would also disagree with the language being complex. I think the only languages that compete with its level of simplicity are mostly other lisps/schemes.
Sure, the syntax itself is very simple and regular (like any Lisp). The complexity is in all the other stuff - macros, code-as-data, vars, namespaces, metadata, managed references, persistent data structures, leiningen, paredit etc.
Once you've got up the steep learning curve, I find Clojure is unbelievably productive. It's just a bit tough getting there. I think it's all solvable, but the Clojure community does need to listen and learn from constructive criticism.
If we're talking about Web apps, technology is much less relevant than the team's abilities. If you're also going for native apps, your options are mostly limited anyway (especially on mobile), but the same principle still applies.
Another reason for going with a familiar technology is that it will be easier for you to find future team members, as you will (presumably) already know the local community, thus avoiding what happened to Reddit.
If they ask "is it sane to use XYZ" I could give them some actually useful information, but sadly people often want to be given the answer rather than get advice.
I'd say this question ranks up there with "Can I ask you a question?" to which I usually respond "You just did...". If you want useful information, just ask for it, your friends and peers are not your parents.
NB: I ported a lolcode interpreter so I do actually encourage people to use it... sometimes...
Value is important. Say that about a thousand times. Once you are creating value, then you can write long blog posts about various tool choices -- or spend time reading them. Until then? These issues are so trivial as to almost not be worthy of discussion.
The interesting thing is that this is exactly backwards from the way most folks are taught programming. You pick the tool first, learn it's secrets, then set about making someone happy. This is a great paradigm if you want to be a corporate programmer, but if you're looking to form a startup you've got the cart in front of the horse. Sure, bring the skills to use all kinds of tech. But don't spend a millisecond focusing on that crap when nobody wants what you're offering.
A lot of guys who say they're in startups are like a severely overweight and out of shape guy who sits around reading running magazines and ordering expensive gear. Yeah sure, that stuff can be dreadfully important. But only in the context of actually doing something. Otherwise it's just bike shedding.
You really nailed it here. I really like the language but I really struggled with debugging code and I'd shit my pants every time I refactored.
I had a much nicer experience with Haskell: If your code compiles, it probably works. With Clojure: If your code compiles, it probably doesn't work. I'll tell you something's wrong, but you'll spend most of your development time discovering the cause. That's very frustrated. But to give Clojure the benefit of the doubt, I never felt like my development pipeline was efficient. Unfortunately, I couldn't find a canonical example of a good development pipeline.
This is actually a fantastic way of looking at it. All programming languages have philosophies, and certain "cultures" that they bring along with them.
It's important to realize that technology choices are not just about the technology.