top | item 6285129

What technology should your startup use?

83 points| mattetti | 12 years ago |matt.aimonetti.net | reply

70 comments

order
[+] untog|12 years ago|reply
Honestly? I think the answer is "the one you already know". Most of the languages covered in the article are capable of doing 90+% of what the average tech startup needs (a web site, an API, database connectivity). Save yourself the trouble of heading towards the latest hip technology and just write with the stuff you already know how to use. Worry about how flexible and scalable it is once you've actually proven your idea works.
[+] mattetti|12 years ago|reply
OP here, when you build a company, you need more than one person so you also need to think about your product needs (what tech better fitted) and who you will hire to help you build it.
[+] edw519|12 years ago|reply
Great comment, untog!

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.

[+] tieTYT|12 years ago|reply
> C#

> 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.

[+] edwinnathaniel|12 years ago|reply
As long as the .NET guys don't have Maven they can't win.

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.

[+] rjbwork|12 years ago|reply
We don't really use designers anymore outside of quick low volume enterprisey data driven apps. It's all about the MVC3/4 and EF5 (6 soon!) stuff. We have Resharper now, made by JetBrains, the Intellij guys, and it kicks total ass. Refactoring is a breeze, and it really helps with dealing with legacy code.

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.

[+] LoneWolf|12 years ago|reply
My first thought too, being an Intellij IDEA user (and mostly java developer) I was annoyed with that affirmation. I had the need to use Visual Studio recently and I can say it is still light years behind Intellij.
[+] Semaphor|12 years ago|reply
As someone who started using Java during college for a side job and after getting a job at the company afterwards switching to C# mostly: IntelliJ vs VS? IntelliJ wins (though VS got way closer). But with plugins? Or mainly one plugin: ReSharper (for those who don't know it's a plugin for VS made by the guys who make IntelliJ). VS with ReSharper has become my favorite IDE.
[+] mattmanser|12 years ago|reply
Both you and Edwin don't seem to have a clue what you're talking about.

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

[+] Spearchucker|12 years ago|reply
The whole "C#, VS and MSDN reek of licenses" is getting a bit staid. I'm writing a thick client/desktop app (almost 300k LoC) using Visual Studio Express , SQL Express and online MSDN. Yes, I paid money for Windows and Office, but that has little bearing on being able to write shrink-wrap quality apps with free tools from Microsoft.
[+] ed_blackburn|12 years ago|reply
Agree. Discounting C# on prejudice against Microsoft "reeks". Ignoring the Bizspark programme, the Microsoft development ecosystem is now so large you can actually avoid Microsoft licences.

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.

[+] polskibus|12 years ago|reply
Well, the article is written from a web app perspective, in which there is a big scaling tax when you go MS (windows server and sql server licenses). I know there's bizspark but it doesn't cover growth hacking startups well(limited prod SQL Server use, 3yrs only).
[+] hackula1|12 years ago|reply
I left the .Net world about 3 years ago. There were plenty of things to complain about, but licensing was never one of them. Most of the stack is free until you get to the point where you should be able to pay for it anyway.
[+] danielweber|12 years ago|reply
Last time I dealt with Windows development (for the desktop) as a small shop, I was completely unable to understand the licensing. It ended up occupying a significant part of my attention.

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.

[+] blacktulip|12 years ago|reply
This comment[0] interested me. I've never exposed to erlang. Can someone please explain this a bit to me why she said only erlang can do concurrency?

[0]: http://matt.aimonetti.net/posts/2013/08/27/what-technology-s...

[+] rdtsc|12 years ago|reply
Good question. Hopefully you have not been put off by that comment. It comes off kind of harsh.

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/

[+] lucaspiller|12 years ago|reply
"Erlang based systems obtain many of the aforementioned properties from the Erlang concurrency model. Erlang handles the concurrency itself instead of relying on the OS. A concurrent entity in Erlang, called Erlang process, is much lighter than a standard OS process or thread, initially using about 3 KB of memory on a 64bit system. In a typical Erlang systems, you can easily create hundreds of thousands or maybe even millions of Erlang processes. The Erlang virtual machine uses its own scheduler which ensures that each process gets a fair share of execution time. The scheduler also distributes processes over available CPU cores, using as few OS threads as possible (by default only as much as the number of available CPU cores)."

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 :)

[+] Mikera|12 years ago|reply
Erlang has a very nice concurrency approach, particularly if you are into distributed and fault tolerant systems.

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).

[+] czbond|12 years ago|reply
I have a different stance on this. The technology that drives the company is strategic business decision, not a technical decision. Sure - create the MVP in whatever you want, the technology is less import - but don't do that for Rev 2. Rev 2, the true architecture of the company should be based on A) what's the right tools for the use case B) are the resources with that talent available to keep from hindering the company? For example, I wouldn't start a company with Go/Rust/etc anywhere but in SanFran - because to most of the country these languages are still fads.
[+] mindcrime|12 years ago|reply
Interesting take, but I'm disappointed that Groovy wasn't broken out into a separate entry. Groovy is a great choice in that you can leverage the entire world of Java libraries, while using a modern, dynamic language that is mostly backwards (syntax) compatible with Java - but without the verbosity. And Grails is a first-class convention-over-configuration framework for building webapps.

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.

[+] vorg|12 years ago|reply
Because Groovy has unfortunately turned into a mere appendage to Grails, with very little independent use, it's generally not considered as a viable standalone language by many people anymore.
[+] wes-exp|12 years ago|reply
Clojure seems to get a lot of attention, but don't forget Common Lisp. If you're tired of the reinvention treadmill and want a great language that is actually mature, CL can be excellent. CL also has great runtime support: SBCL (for super performance) and ABCL (if you need the JVM).
[+] BerislavLopac|12 years ago|reply
There is only one answer to this question: whatever your people are best with. Whether have any "people" (including yourself) who can code or not, you don't need to worry about the technology, you need to worry about your team.

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.

[+] bifrost|12 years ago|reply
I have similar views to the author, however I generally respond with "LOLCODE, all the cool kids are using it" because its clear they need to do the work themselves to figure it out.

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...

[+] DanielBMarkham|12 years ago|reply
Asking this question for many readers is like asking "What kinds of shoes should your startup use?"

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.

[+] greatzebu|12 years ago|reply
I clicked through in the hope that it would say "it barely matters, just get started and fix mistakes as you go". It started off with promise when he asserted that the people asking this question usually didn't actually care about his answer and that other factors are much more important, but then for some reason we got the long list of languages and bullet points anyway.
[+] tieTYT|12 years ago|reply
> My problem with Clojure is that ... Exceptions are often meaningless and trying to debug someone else’s code is challenging since the language itself is complex and it can be extended by macros. Finally, the Clojure community isn’t really web-oriented, most of the work done in Clojure seems to be data-centric.

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.

[+] bernatfp|12 years ago|reply
I thought this lesson was already learned. You should use the one you're more comfortable with to build an MVP even if it doesn't scale well. You will take care about that later.
[+] cgag|12 years ago|reply
I don't know what you mean by Clojure being data-centric rather than web centric. Requests are data, responses are data. Plenty of people are doing web-dev in Clojure.

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.

[+] Mikera|12 years ago|reply
The point about complexity is probably fair from the perspective of someone just getting started with Clojure.

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.

[+] crazygringo|12 years ago|reply
> Does this technology fit my company’s core values?

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.

[+] weakwire|12 years ago|reply
scala is just great (minus compile time). But really. what you know best . (pref type safe)