A lot!
This is the only answer that came to my mind. Few years ago, I would have said few years, but not now. Making a social network is one thing, making it usable for millions of users is something else.
Let me explain my answer by explaining the technologies that you’ll need. I am assuming that you might want to build something like Twitter or Pinterest.
Front End / Client Side :
Front End is something which the user will see when they load the browser. Few years ago there were very few options that they would have needed, but not now. To get the last drop of performance from the browsers which can handle the load of few million active users, you’ll have to rely on these new front end technologies. Let me give you a glimpse of what I can think of right now.
JavaScript / TypeScript / CoffeeScript - You’ll need to learn a programming language in which you can write your client side script. JavaScript (JS) was the only answer few years ago, which was replaced by CoffeeScript, but finally TypeScript looks like it’s winning the war. It ultimately transpile to JavaScript, but it makes your work really easy and maintaining the code super easy.
CSS / Stylus / LESS / SASS - CSS is something which you’ll use for styling your page. The problem with CSS is that it’s not made for a big project and can’t have any programming in it. Thus we have few preprocessors for it, such as Stylus, LESS and SASS. They bring these capability in CSS and ultimately transpile into CSS, but saves you from the trouble of writing all those css by hand.
HTML / Pug / EJS / Handlebars / Jinja2 - HTML is easy, right? Not when you have to create 100+ html pages. You’ll need a templating library and I am not even in the mood of mentioning all of them here.
AngularJS / Angular / ReactJS / Backbone.js / Vue.js / jQuery - You might have heard about them. They are the backbone of the whole SPA (Single Page Architecture) revolution. These libraries / frameworks are essential for creating a production ready application. Learning and using them in your project will take a lot of time, but will be worth it. You do not need to know all of them, but sometimes you might require to use more than one in your project, based on the requirements.
Webpack / Gulp / Grunt - These are utility libraries which allows you to write simple tasks / configuration which results into automating many of the stuffs such as combining and minifying JS files. Another task could be Transpiling TypeScript, Stylus, Pug, etc into JS, CSS and HTML respectively. These require you to have basic understanding of Node.js which is an entire plethora of things of its own. In addition, webpack requires you to have some knowledge of module system such as AMD or commonjs.
Bower / NPM / Browserify - These are the ways to download and manage your dependencies such as libraries. They are easy to master, although must for a production application.
That was all about Front End Web. Now let’s talk about the Back end.
Back End / Server Side :
Programming languages - I can’t even mention all the names that are coming in my mind right now. I can just think of Python, JavaScript, Java, PHP, C#, C++, Swift, Erlang… The choices are unlimited here. You can literally make your back end code in any language, but you have to take the decision keeping rest of the components in the mind too.
NginX / Apache / Tomcat / IIS - Choosing a server software is a crucial part. You choose them based on the rest of the stack that you’re using. For example, IIS is meant for Windows server, Apache goes good with PHP and Tomcat / glassfish is good with Java. Sometimes you don’t need them at all.
Node.js + Express / Django / Ruby on Rails / WebApp2 - Choosing a web framework is something that requires a lot of thought and expertise. You make it as per the knowledge of programming languages that you already posses and the infrastructure that you want this to be deployed on. If you know JS, Node.js + Express is an excellent choice. While if you’re more on the Python side, Django, Flask or WebApp2 are good for you.
MySql / Postgresql / Sql Server / Oracle - If you go with the SQL side of things in your database, you’ll need to choose one of them. The good thing about SQL is that it’s easy to carry over your knowledge to another DBMS. The bad thing is, you’ll pluck the hairs from your head in frustration if you even needed to migrate it. Remember that it requires a whole team to manage databases of even a medium sized public app.
MongoDB / Couch DB / Dynamo DB / Cloud DataStore - If you go with the NoSql mode then you’ll need to choose between these and many other options. The options are based on where are you deploying it.
Google Cloud Platform / Amazon Web Services / Microsoft Azure / IBM Bluemix - This is a tough choice to make with so many cloud providers to choose from. GCP is cheaper than AWS, but you’ll find it easy to start on AWS due to the tutorials available. Azure is for those who are already on Microsoft stack. Choices choices choices!
Virtual Machines or Containers - Now this is the real issue. If you go with virtual machines, you’ll have to learn about grouping, scaling and managing your servers. If you try to make it easy to manage by going with containers, you’ll need to learn about docker, docker swarm, Kubernetes etc. to containerize your application and auto scale it. All the cloud providers have multiple options in each category and you’ll have to learn about most of them to understand which one is well suited to you.
Google App Engine / Firebase - You can give up with all this non-sense about VMs and Containers and can go with PaaS solution such as GAE or can go directly serverless with Firebase. They are not recommended for an application with a million users (Trust me, I have used it for thousands of users), but you can start with it.
Now since the back end is sorted, let’s come to the Mobile Application part
Mobile Application:
Android - I am not giving any choice here, since you won’t have any. You’ll have to make your app available for Android. You’ll need to learn either Kotlin or Java to make your app. Not to mention XML to create user interface.
iOS - Again, no choice here. You may go with either Swift (recommended) or Objective C here. You’ll need to learn macOS since iOS programming requires Xcode and it’s only available for macOS.
Xamarin / React Native / Angular / Phonegap - These are options to create your application in Cross platform way. In this way you can create your application once and can build it for different mobile OS simultaneously. Most of these solutions uses Web technologies such as HTML/CSS/JS (which you already know since you have front end knowledge till now). I don’t generally recommend going hybrid, but these are performing better and better every day. You won’t be able to go as fast as Native (Java and swift) though. I recommend Xamarin, since it allows you to create different native UI for different OS. It’s your choice in the end.
So now you can see, how many things you need to know to create and maintain anything similar to Twitter. I even forgot to mention a lot of things in the middle, such as data analysis, big data, machine learning etc. You can check an example solution here -
Source: Project Treehouse
Companies have teams for handling each of these technologies, so thinking that you can do it all yourself is stupid. It’s not impossible to learn all of them ( I kinda did), but it’s certainly impossible to do all of them yourself.
This answer is not here to demotivate you into creating anything beautiful you dreamt of, but to make you understand the sheer amount of work which goes into creating applications like twitter, facebook or quora. The developers are not paid to do nothing. This answer was written to make your expectations realistic.
Take just one technology and try to make something using just that. You may probably create another Facebook like miracle.
Happy Coding!
PS: The answer could have been written in a better way, but it’s 3 AM on Monday morning. That’s all I could do.