Tech Founders' Guide to Picking the Languages for Startup
Programming Languages for Startups - Code Zen - Medium
Things to consider when choosing the languages to build something quick and fun.I’ve been working on my side project Dilio as a solo coder. It has been counter-productive for me to evaluate tools and languages to build, and so I eventually came up with a few guidelines in choosing the right tools for the tasks, one which you might find helpful, starting with the DOs.Do consider1 | Tooling (how easy to get from A to B)Surprisingly, a good language is only half the win. It needs to have a rich ecosystem of tools to help you win small and quickly. Take React/JS with create-react-app. Node with yarn. Python and Go with itself. You want something to run on the first few tries. Because you are going to be running those commands repeatedly. It also helps with your morale and keeps you building consistently. Node.js, Python, Julia, Clojure with a REPL is a big plus in this continuous discovery process.My choice: Node.js, Python, Go, Clojure, Elixir2 | Ergonomy (how easy to type/transmit from 🧠 to 🖐🏽)This is different for everyone, but you need to feel that the language’s design shouldn’t resist your hands’ movements. It should be natural typing it out and quickly translating your thought process to code. Arguably, as you get more used to typing in a language your muscle memory will be more adapted to it, but chances are you wouldn’t want to wait until then to become productive.In a nutshell, you need to pick a language that you can type in as quickly as you type on Slack or email.My choice: Go3 | Expressiveness (how easy to express ideas simply)Some call it elegance, but that sounds a bit Rubyist (although Ruby is one of the most expressive languages). An expressive language allows you to “express” your idea or intention in a higher-level, more concise and descriptive way. For instance, SQL is a very expressive language:SELECT * FROM users WHERE first_name='Chasinga' AND status='married';So is JavaScript:user.is_married ? user.spouse : null;Note that expressiveness is more about the person writing code and not necessarily always easy for the person reading.My choice: JavaScript / TypeScriptTaking Kelsey Hightower words of wisdom4 | Resources (size of knowledge pool + quality of community)It goes without saying that in starting up, you will be at the noob end in more than one scenario. You want to put yourself among an abundant group of reliable people who are in general kind, helpful, and preach the language. You also want to get more than a few readings on a search and dig into whatever is easier for you or solve your problem at hand.My choice: JavaScript, Python, Go, Elixir5 | Learnability (how easy to learn and understand)The language or tool shouldn’t be multifaceted and takes too much time to learn since you have a lot of other things to pick up other than writing code. If it takes you more than a day to learn and run a simple API server in a language, it’s probably not the best candidate in this category.This is somehow tricky because the language itself (the compiler/interpreter) might be simple and learnable, but the tooling that makes it useful in practice is not. Examples of languages that are learnable in itself but lacking in tooling and other categories are Erlang, Common Lisp, and Ocaml (I like all of them tbh).My choice: Go, Python, JavaScript6 | Libraries (who wants to reinvent the wheel?)You want to use a language that you can say “there’s a library for that” most of the time. Kelsey Hightower mentioned how you should be excited about what you are going to build. The last thing you want to get excited about is the library you have to implement yourself. It is already very distracting and you should not make it more by trying to implement things others can probably do better at.My choice: Node.js, Python7 | FamiliarityThis is obvious, but having some experience with the language from work already means you can touch the ground running. However, if you are familiar enough to know its flaws in other categories, don’t use it.8 | Fun to writeThis is a very legit criteria. You will be spending months of hard work, so it must be delightful to use and fun to collaborate with your cofounders and others.Building a product is distracting. Don’t make your tools a distraction.Don’t consider1 | Novelty (how awesome or intellectually pleasing it is)Some languages and tools will make you intellectually fulfilled and made your day. They are easy to spot because they make you feel super duper important just to use them and derail you from sharply focusing on the product. Don’t fall into the trap.These languages are likely to be great at making you a better programmer. But ask yourself this question: Do you want to be a better programmer or do you want to build better shit and get better programmers to work for you?2 | Popularity (how easy to recruit others to help you later)IMO I couldn’t care less about this. When it comes to recruiting, you don’t want a large pool of inexperienced candidates because you will spend an equal amount of time on each of them. I think choosing a language you know people with more experience use and that down the road you will get a small pool of talents that will likely have a higher yield rate.Just bear in mind that there’s a fine line here. Picking Ocaml to build your stuff will risk you a very small pool of super talented programmers who might be over-qualified.3 | Age (as in a good whiskey?)It’s okay when a language is battle-tested, but aged languages are also bogged down by backward-compatibility and legacy issues that make them slow to change. Newer languages, on the contrary, have the advantages of learning from the best and cherry-picking battle-tested features off several ones. For instance, Golang improved upon C and make it stupidly simple for anyone to write fast concurrent code and Julia improved upon Python by selecting the latter’s strong suite mixing with some others from different languages like R, Ruby, and Lisp.