Need advice about which tool to choose?Ask the StackShare community!
Go vs Node.js: What are the differences?
Introduction
In this markdown code, we will be discussing the key differences between Go and Node.js. Go is a statically typed language developed by Google, known for its efficiency and built-in support for concurrency. On the other hand, Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine, which allows JavaScript to be executed outside of a web browser.
Compilation vs Interpretation: One of the major differences between Go and Node.js is how they handle code execution. Go is a compiled language, which means the code is converted into machine code before it is executed. On the other hand, Node.js is an interpreted language, where the code is executed line by line without prior compilation. This makes Go more efficient and faster in terms of execution.
Concurrency Model: Another significant difference between the two is their concurrency model. Go has built-in support for concurrency through goroutines and channels. Goroutines are lightweight threads that allow for concurrent execution, while channels facilitate communication and synchronization between goroutines. In Node.js, concurrency is achieved through an event-driven, non-blocking architecture, as it is based on the JavaScript event loop model.
Performance: Go is known for its exceptional performance due to its compiled nature and efficient runtime. It performs better in CPU-intensive tasks and can handle large-scale applications efficiently. On the other hand, Node.js, being an interpreted language, may not provide the same level of performance as Go, especially in CPU-bound operations. However, Node.js shines in I/O-intensive tasks due to its non-blocking I/O model.
Language Features: While both Go and Node.js are popular for different reasons, they have distinct language features. Go is a statically typed language with a focus on simplicity, efficiency, and strong typing. It has built-in support for features like pointers, type inference, and garbage collection. On the other hand, Node.js, being based on JavaScript, is dynamically typed and offers features like callbacks, closures, and higher-order functions.
Community and Ecosystem: Go and Node.js have vibrant and active developer communities, but they differ in terms of ecosystem and library support. Go has a smaller ecosystem compared to Node.js, with a more focused set of standard libraries. Node.js, being based on JavaScript, has a vast ecosystem with a wide range of libraries and frameworks available, making it easier to find existing solutions and integrate with other technologies.
Scalability: Both Go and Node.js are known for their scalability, but they achieve it in different ways. Go's concurrency model and efficient runtime make it well-suited for building scalable applications by utilizing parallelism. Node.js, on the other hand, achieves scalability through its event-driven, non-blocking architecture, which allows it to handle a large number of concurrent connections efficiently.
In summary, Go and Node.js have several key differences, including their execution model (compilation vs interpretation), concurrency model (goroutines vs event-driven), performance characteristics, language features, ecosystem size, and scalability approaches. These differences make each of them suitable for specific use cases and development scenarios.
Currently, I am a university student, and it is my second last semester with a major in Computer science. I want to start my career in full-stack web development. I know Python with Django + PHP with Laravel, and my focus is on learning MERN stack. I am a little bit confused as to which technology I should choose: Django or Magento or MERN stack.
#newbie
I suggest you to go with MERN Stack (Mongo,express,react,Node). As you know python and django which is a plus point because you can use python and node as your backend and for front-end use react(easy to learn) and database of your choice.(Mongo or SQL)
Currently working on my company's new saas, the main goal is to manage content and user. I'm familiar with the rails framework and how it is easy to code and deploy. The thing is I'm the only dev on the project, and in terms of the tech stack, there is no preference. However, because Node.js is everywhere and there is enough dev on the market, I am stuck between choosing Rails or Node.js. I don't mind implementing Vue.js or React on the frontend, but I need a solid argument to explain to people that aren't necessarily tech-savvy as to why we should choose Rails over Nodejs.
You are probably referring to ruby on rails for web development and nodejs for building the backend. Nodejs has frameworks such as express and next which not only provides a minimal code to build a backend but also gives the flexibility to try and experiment with the framework choices. For example you can have express framework + Passport for OAuth .... etc. The flexibility and the constant improvement of the language provides a good reason to opt for nodejs. Nodejs uses javascript which makes your code uniform when you are working full stack i.e react in front end and nodejs in backend.
I'd use the following metaphor to non-technical people. Rails is like a prepackaged toolkit, which can get most of the common tasks done fairly with ease. Whereas, node.js with whatever backend framekwork of choice, is like a DIY toolkit assembled by mix-and-match different tools in a large tool shop. Of course, at times DIY toolkit can do better on specific tasks. Given that you are the only dev on the project, I'd assume that the resource is fairly limited. And looks like you are not building some next-gen super duper fast smart application. So Just go with the prepackaged toolkit then. Rails is a very opinionated framework, there're pros and cons to it. But thanks to that, many of the gems are coded with it in mind. For example, they are all designed with same naming convention. Many will work well together out-of-box, for example devise and cancancan. Besides, many stuff are built in the framework. For example, logging utility, csrf protection, session encryption, etc. Yes, many of those stuff may not be useful or necessary at the beginning of the project life-cycle. However, down the road, there is a good chance you will need some of those. And the moment you realize that you already have it, it's so delightful. In addition, it's usually easier to debug a rails app than a node app in my experience. Personally, the cases where I would pick node.js over rails would be projects either require a) high-performance, or b) certain core functionality that has been implemented by some node packages but not by any ruby gems. In term of performance, node has a clear advantage over any other major web frameworks, except the ones built with go. It's simply a language feature. Node allows developer to easily write code that runs db query, external api calls, or other stuff of that nature in parallel. And that is THE MOST COMMON performance bottleneck of web applications.
Rails is currently a very mature and feature complete framework.
It's the ideal one if you're the only dev for your project because you get so many things already baked-in the framework that you'd only need to deeply care about specific stuff.
I won't say any NodeJS framework isn't good enough but in my experience with NodeJS frameworks you have to code a lot of the things Rails already provides. There's many people in Twitter and IRL asking for a "Rails for JavaScript" framework.
And you know? In the early stages of any project we have to validate it first with real users/customers. With Rails you can get to production real quick and fast.
I'm going to mention some of the features you get from day 1 when you run rails new app_name
:
- File uploading with Active Storage
- Rich text editor with Action Text
- Emailing with Action Mailer
- ORM, migrations, validations with Active Record
- Web sockets with Action Cable
- Internationalization
- Modern frontend stuff with Webpacker
and more.
The JavaScript community is on its moment, growing and gathering more people everyday but the Rails community is also a big one and there's always going to be a Rails developer to hire whenever you're ready to hire someone.
I suggest you to go with Rails because is a good choice, gives you less things to worry about and it's a very good and mature framework.
I hate to admit it, because I loved my time with Rails (and I still love the framework), I have a hard time justifying new Rails applications these days. Core team has made some tragic design decisions, and developers just don't perceive it as being "cool" any more. The latter is a terrible metric for which to base a technology decision, but I think you'll find it more difficult to recruit additional engineers if you choose Ruby on Rails.
Without knowing too much of the details, Node/Express (ideally with Typescript) seems like a better solution here, given you'll be building out the front-end in Vue or React. It might be worth looking at NestJS, as it's the closest I've seen to a well-formed opinionated framework on the Node side of things. We're also fans of Objection ORM.
I hope that's helpful!
I need a solid argument to explain to people that aren't necessarily tech-savvy as to why we should choose Rails over Nodejs
Hi Max, it sounds like that you are proficient in both stacks and probably have a higher expertise in Rails (correct me if I am wrong) and since you are the only dev on a project, a good argument that comes to mind is probably the velocity and maturity (enterprise grade, battle tested in production) that Rails provide with proven success stories in the tech industry such as Airbnb, Stripes, Shopify to name a few. You can also make the argument that Rails is great to run the backend and React+Vue (and nodejs for tooling) is ideal for the front-end development (see or find companies example that use both). You can also build and show a prototype using both and share your experience which could help you find and forge the selling points to those non tech savvy folks, why not.
Eventually, are you going to have other developers on your project? if yes then you will need to take in account, onboarding and ramp up to contribution time when they are hired.
IMHO, I am not a fan of the debate Rails vs Nodejs, they are just tools at the disposal of the developer it's just a matter of figuring out what makes the most sense.
Let me know if you wanna discuss further, happy to help out!
ps: markdown preview on stack share... no good.
Rails has advantages over node.js (specifically express) when working a more complicated backend. While Express has some speed advantages to Rails, this is mitigated if your software is more CPU intensive.
I have learned both Python and JavaScript. I also tried my hand at Django. But i found it difficult to work with Django, on frontend its Jinja format is very confusing and limited. I have not tried Node.js yet and unsure which tool to go ahead with. I want an internship as soon as possible so please answer keeping that in mind.
If you are currently not working my first suggestion is to study both the frameworks and get a good grasp of those. If you didn't get confident with Django in the first place you should reconsider going back and study more. Get a video course with some code-along and produce some simple application you can showcase on your interviews. If you already took a course take a different one. Another trainer could be more effective and you could experience something new with different excercises. There are lots of both free and paid courses out there. When you will get confident with Django get your feet wet with Node.js because it surely worth it. Node is very different from Django from some perspective, it looks more like an asynchronous version of Flask to me. Be sure to have a good knowledge of ES6 first, because it will be really useful to understand the Node best practices. Study as much as you can now if you are not working. It will supercharge you for the future...
From my experience of the early startup world, a majority of companies these days use Node.js. Python and Go are the next biggest languages, but significantly smaller than Node.
However, if you're having trouble with the front end aspect of Django, using Node probably won't make that easier for you. You'll have a lot more options between front end frameworks (React, Vue.js, Angular 2) , but they'll definitely take more time to learn than Django's templating system.
Think about whether you want to focus on front end or back end for now, and make a decision from there.
I had the same question myself a few months ago. I finally chose Node.js, and it was one of the best options I did back then. From when I started programming, I always believed that Python was for me the best language, secure and stable. However, it is not flexible for web development, there are more packages & libraries that are built and work only with JavaScript / TypeScript, and the community, resources & support is much bigger. I was also fascinated by the Django ORM, which I still am, & the admin interface. But those are things, that can be replaces by other tools, such as TypeORM, and the admin interface was not needed at all finally for my case. I know understand that Python is not the language that I should use everywhere and every time, but I can say that it is really good for algorithms, computer science, maths, statistics, analytics & AI. To be honest, I chose TypeScript (TS) with Node.js & Express, because it has auto-completion and "strict" code checking. I hope this helps you, and let you take a look at various aspects of choosing a programming language to work with.
Jinja is a template rendering engine and you will encounter some sort of template rendering engine in each language. Jinja is a pretty standard tool and almost every language has some sort of Jinja equivalent. Ruby has Liquid, Node has Nunjucks, Java has Jinjava, Go's default templating engine is easy to pick up if you know Jinja, Helm charts are easier to pick if know Jinja . So learning Jinja is a good thing.
I would suggest to go with js, it's the craze now when you enter into the stack it has variety of options and tools that you can adopt , and more than that the demand for js engineers is exponentially increasing and js can do magic in any type of application or architecture.
Actually, you could get very good solution with implementing BE and admin panel with Django and FE with React.js or Vue.js. it will provide you a pretty flexible and powerful environment.
If you already know some django stuff you should keep that learning path. And for the job if you really want an internship you should learn to make rest APIs using django or nodejs, and a front end that consumes those APIs using some framework
I'm planning with a small team to create an application which is a platform for restaurants. I'm on the backend almost alone currently. I'm going to use Node.js for that, and I'm very fond of TypeScript, and I worked before mostly with ExpressJS. The team may get bigger as the application becomes bigger and more successful, so I have the Scalability concern in mind now, and I was considering these options: 1) Use Node+Express+Typescript 2) Use Node+NestJs (which utilizes Typescript by default)
Option 2 is enticing to me because recently I came to love NestJS and it provides more scalability for the project and uses Typescript in the best way and uses Express under the hood. Also I come from an Angular 2 background, which I think is the best frontend framework (my opinion, and I know React quite well), which makes Nest feel familiar to me because of the similarity between Nest and Angular. Option 1 on the other hand uses Express which is a minimalist framework, very popular one, but it doesn't provide the same scalability and brings decision fatigue about what to combine with it and may not utilize Typescript in the best way. Yet, on the other hand, it is flexible and it may be easier to manipulate things in different ways with it. Another very important thing is that it would be easier in my view to hire Node developers with skills in Express than NestJs. The majority of Node developers are much more familiar with JavaScript and Express.
What is your advice and why? I would love to hear especially from developers who worked on both Express and Nest
I highly recommend NestJS because:
- It's a framework you already like;
- Typescript is growing fast, being increasingly adopted in the community;
- All layers are well defined, not needing to think much about the organization;
- Great documentation;
- Nest CLI increases the development speed and keep the pattern;
Only using express and knowing that project can grow, you'ill need to define the structure well so that it doesn't get out of control.
Hi Louai,
I am quite sure that you know the answer to your problem. And I am here to help you to follow your arrow. I have worked with the most popular Nodejs frameworks and I can sure you that there's no stack better than NestJS (at all). Typescript is the best thing that happened with Javascript, this is a fact. Ans NestJS make a such wonderful job using all the best Typescript tools. NestJS is the most mature and organized API manager. Its modular dependence injection, the use of DDD, the solid idea of single responsibility, it's unit a and e2e testing support, its documentation is the most incredible work in the world of Nodejs. You won't regret choosing this framework, even if your application grows a lot. If you follow the documentation tips you will be able to create an amazing and organized application.
ps: I am not part of the NestJS team, I am just a guy tired of wasting time with dumb and bad Frameworks and its bad documentations. I find relief in NestJS with all the time it's saved to me, it helped me to improve my job and let me create great things with Nodejs.
Hi, I'm in a similar position, but related to personal projects. After falling in love with few frameworks in the first day and rejecting them in day 2, I started learning nestJS last week. I currently develop personal side projects using cakephp, and I intend to migrate to nest + vue. This week I'm taking a nestJS course in order to be sure that this is what I want by praticing a little. If you didn't do it yet, I suggest you try to code a todo app or a similar example API using nest, so you can "feel" if this is indeed what you want to use in this larger-scale project.
Some of the characteristics that got my attention to nestJS are typescript, a lot of annotations/decorations, an oppinionated approach to organizing the project, nice documentation and discord, and it's evolution at npm trends shows me it's probably not going to vanish or get buggy anytime soon.
I would definitely suggest NestJs over other options because NestJs gives a lot of tooling. it would definitely suggest NestJs over other options because NestJs gives a lot of tooling & it gives a lot of functionality out of the box. If your team worked with angular 2+ then it will really easy to learn.
First of all, my experience using either Node.js with Express or NestJS is not wide. I liked NestJS due to it's similarity to Angular, so when you know Angluar and like TypeScript you are going to love NestJS, it will be instantly very familiar and easy to use, it's adds a good structure to the project out of the box and well, it uses TypeScript, which is a more structured language - it's good for scalability. As for performance concern s - NestJS is based on Node, it just brings Angular's modular structure to it, so the question is more about how is the additional layer influences the performance - I cannot answer that.
Have you checked out Hapi as an alternative? I'ts not Typescript by default though. If that doesn't seem too interesting, it sounds like you want to go with NestJS :)
Hi, I am looking to select tech stack for front end and back end development. Considering Spring Boot vs Node.js for developing microservices. Front end tech stack is selected as React framework. Both of them are equally good for me, long term perspective most of services will be more based on I/O vs heavy computing. Leaning toward node.js, but will require team to learn this tech stack, so little hesitant.
It's probably worth investing some time for your team to learn Node.js. There's very little overhead, especially with a framework like ExpressJS, so if your team is familiar with JavaScript it should be a quick process.
It handles I/O really well out of the box, and has a strong community with great open source libraries. Since you're using React on the front end, there's also some benefit to being able to use JavaScript throughout your stack.
I'm about to begin working on an API, for which I plan to add GraphQL connectivity for processing data. The data processed will mainly be audio files being downloaded/uploaded with some user messaging & authentication.
I don't mind the difficulty in any service since I've used C++ (for data structures & algorithms at least) and would also say I am patient and can learn fairly quickly. My main concerns would be their performance, libraries/community, and job marketability.
Why I'm stuck between these three...
Symfony: I've programmed in PHP for back-end in a previous internship and may do so again in a few months.
Node.js: It's newer than PHP, and it's JavaScript where my front-end stack will be React and (likely) React Native.
Go: It's newer than PHP, I've heard of its good performance, and it would be nice to learn a new (growing) language.
Go with Node.js. There's something really satisfying about being able to use a single language across your entire tech stack. Especially once you integrate GraphQL, which is effectively JSON.
Your second best option is Go, but the ecosystem around Node.js is quite a bit stronger. This will play a big factor when you start building functionality like file management, messaging (especially in real-time), and authentication. The libraries and documentation are just stronger for Node.
Hello... I hope everyone is ok amid today's global situation.
I'm trying to choose the perfect stack for a new mobile app project that resembles the super apps like GoJek & Grab.
I have gone to BUILTWITH and seen what their stack on all fronts.....however, and even though, they both differ from one another, I'm still looking for the perfect stack that will give us PERFORMANCE & SCALABILITY for years to come.
Your comments & suggestions are very important to us, so please share your thoughts.
We recommend Laravel over Ruby on Rails (Ruby) and Express.js (JavaScript/Node.js). We chose Laravel ourselves for our own internal software project, recently after comparing these same 3 software frameworks. In selecting Laravel, we chose to build our app using the software language PHP. PHP has the largest market share of all the web-based software languages (close to 80% of all websites use PHP). Also, Laravel is the fastest-growing software framework based on PHP making it a wise choice.
We also plan to integrate WordPress and WooCommerce later with our Laravel web-app. WordPress and WooCommerce like Laravel are all built using PHP. WordPress is the most popular Content Management System in the world. This will allow us to build out the front-end marketing website in WordPress. Also, we plan to offer subscriptions and sell products. For this, we will use WooCommerce. WooCommerce is the most used e-commerce platform in the world. We’ll be able to use our same Laravel developers to extend our app to WordPress and WooCommerce. By standardizing on PHP, we’ll be able to use the same software developers on all 3 platforms. PHP’s large market share will be an asset to us as we start recruiting talented software developers.
Lastly, we are gaining access to a fast-growing and awesome community that supports Laravel. Before we made our decision, I personally met Laravel’s founder Taylor Otwell along with several of his team members. After meeting with the Laravel team at Laracon US in New York City and learning more about the direction they are going with the framework, we’re confident we made the right decision.
To read the longer version of this answer where we go into more detail behind our recommendation, visit https://rackless.com/laravel-rails-expressjs
Before I recommend a tool, I think it is important to look at your requirements and capabilities - as you have looked at 3 very different tools: different programming languages, different implementation strategies and different target audience. It sounds like you don't already have a set of dedicated developers, so it is likely that your choice should be mainly driven by how easy it is to get developers that are familiar with the tools - so I'm going to list some considerations that I think you should review, starting with what I believe would be the most important for your bootstrap process:
Mindshare: how easy it is to get developers that are familiar with the technology and can immediately start working on your project. This is definitely where Node.js shines - Javascript is one of the fastest growing languages and Node.js played a huge part in this. I would bet that wherever you are located, Javascript developers would be the easiest to come by.
Fit for purpose: from your description we can understand that you are looking at a backend technology to implement some sort of REST API for a mobile app. The 3 different options you offered each fit on a different place on such a stack: Ruby is a programming language and not even a service framework - if you choose it, you then have to choose a server implementation and REST framework (and there are a lot, mostly as Ruby has a standard API for connecting a web server and application frameworks, and so this space has blown up) it used to be that Rails was the most popular, so you may choose that, but the interest in it has waned a bit in recent years; Node.js is a server framework, but it also has a dominant application framework called Express, that is geared well to your usage, so you'd likely work with that; Laravel is an application framework - it uses the PHP programming language, whose use has declined a bit in recent years, and was originally built for MVC type applications - though it has workflows for REST APIs and would probably work well for you as well.
Scalability: while this is probably the least significant issue at the moment (when it gets to a point where the backend service is your bottleneck, you'd likely have enough resources for a rewrite), and also the most dependent on factors that you didn't specify and are hard to estimate (such as: session complexity; amounts of data; sensitivity to locality; sensitivity to latency), it is still worthy to address it. Unfortunately, I don't have any good news: Ruby is notoriously bad at getting the best performance (the current BKM for milking performance from a Ruby codebase is to run the app on the Java virtual machine); Node.js has severe memory limitations that will make it very hard to scale if your backend needs to do a lot of work (I have a very personal and troubling experience with this issue); and PHP has as many scalability optimization strategies as there are PHP developers (this is not a good thing).
My suggestion to you as to how to proceed can be summarized to this prioritized list of options: 1. Get a good head developer with a lot of experience and let them choose the best tool - they'd likely go with what they know, which is likely to be a good choice - and if not, when scalability will become an issue, you could rewrite. 2. Choose something (likely Node.js) and don't worry about scalability - see (1) above. 3. Use Vert.x: it is a highly scalable application and service framework that offers great performance as well as a lot of tools to solve data scalability, locality and latency, and it works with multiple programming languages, such as Javascript and Ruby.
Node.js would be the best choice among all, you can compare all 3 of them on Stackshare and you will find that Node.js is on the top on almost every aspect, and since your focus is primarily on Performance and Scalability you won't regret after choosing Node.js. Also, the JavaScript open-source community has made a lot of effort and created numerous packages that will give you the speed and smooth execution of your project you need. Though your question was regarding backend, but if you choose JavaScript(Node.js) at your backend, then you can have a cross-functional team that can work on both, frontend as well as backend because JavaScript is everywhere, React Native for Android and iOS apps, React.js for single page web apps and Node.js ofcourse for your backend. And I don't have to tell you how much easier it would be to code and manage in a single language to build your complete system end-to-end. I hope it helps.
That's a really ambitious project. So you're going to want to move as quickly as possible. That means choosing a software stack that will allow you to move the most quickly. Of the ones you've listed, Ruby (Ruby on Rails, more precisely) will give you that. There are probably other options that would allow you to move even more quickly than Rails, but developers for those more advanced stacks are much more expensive, and hard to find.
Rails can and does scale to millions of users. It's not necessarily easy, but if you're running a successful app, you'll be able to afford people to help you scale out when you reach that point. But if you choose a slower framework (or have bad developers) you won't even reach the point of needing scalability.
Hi everyone! I just joined this site today and I need a little help...
So I'm a little bit new to webapp developing and I'm trying to think of the tech stack needed for my class project. The project idea is basically a forum system and I believe the main components are the following: (1) The front end (2) The backend (3-ish) The database
For the front end I'm thinking React, not too much difficulty here. The main issues for me are thinking about the backend and the database. I really like the idea of using Go to create the backend server, but then again I have little to no experience in Golang. Is it a good idea to give it a try for an eight week long project or default to Node.js?
Regarding the database, I'm thinking of using PostgreSQL, but I'm not sure how to setup these sorts of sql servers. I also don't know how I would host golang servers.
Please send any suggestions or tips to me, thanks!
Hi Jjx003, I will recommend you to go for Node.js with Mongodb. I have been working with the both from long time. Node.js is very good for implementing things which require fast I/O system. I have developed the whole inventory system in React Node.js MongoDB and it is working very fine even after the product database has been so heavy. Apart from this, it will be easy for you to go for one language while developing the frontend and backend i.e. Javascript.
For an 8 week project, pick what you know. If node.js is what you know, just do that. Do you know how to use docker? If you know how to use docker, you can get any SQL database running on your machine pretty quickly without having to know how to manage the database server itself. Think of it as a database as a service for your local setup.
In production, I wouldn't pick node.js as a backend language. I'm sure it can be performant, but I personally have not seen node scale well in the backend. Go is performant. They have widely adopted libraries, SQL drivers in your case. You can build slim docker containers, and also js doesn't have type safety.
If the is the business project go with Node, but if the purpose of learning you could try golang
8 weeks is a short period for a project(no matter how easy it seems in a project charter or design paper), it could take you 4... 8.. or 20 weeks depending on available time, resources, scope changes, etc. Go is an easy language to learn, but if you have javascript experience... and no C, C++ experience, I would go with what I know and leave learning Go for weekends or free time and then apply it.
That being said, IMHO, Go is better than NodeJs in almost every sense. So I wouldn't waste time and get to learn it asap, so you are ready for the next project.
On the server side, 90% of the time I would recommend Node.js + ExpressJS for REST backends, but in this case I'd actually recommend Go. It's nothing to do with the actual language/tech, but it sounds like this is a fairly small project which in my opinion is the best time to learn something new. If you realize you hate the language, you're only stuck with it for eight weeks.
On the database side, I'd recommend PostgreSQL. It might be a little harder to learn at the start than MongoDB (which is effectively just JSON), but it funnels you into good database practices because it's more highly opinionated and structured. This means you'll develop way better database design skills which is way more valuable than a few hours saved on learning.
As this is going to be for a project with deadline, i would highly recommend to go with node.js, for you will be able to complete it on time and also be able to tackle problems that come your way.
I've been juggling with an app idea and am clueless about how to build it.
A little about the app:
- Social network type app ,
- Users can create different directories, in those directories post images and/or text that'll be shared on a public dashboard .
Directory creation is the main point of this app. Besides there'll be rooms(groups),chatting system, search operations similar to instagram,push notifications
I have two options:
- React Native, Python, AWS stack or
- Flutter, Go ( I don't know what stack or tools to use)
Currently, I have decided to use Python and JavaScript (especially React and Node.js) for any of my projects. Well, I have used Python with Django for a lot of things, and I would certainly recommend Django to anyone, due to its high secure authentication and authorization inbuilt system, a ready to use admin platform, template tags, and many more. Well, I guess that you would like to use Python to create the backend of your application, an API, and React Native for the frontend. Python and JavaScript (React) are on the trend these days and have a huge community, so there are many resources, tutorials, great documentation. I have not really heard anyone using Flutter and Go for applications these days, so I would not recommend it to you, it would make your life much more difficult.
Hope that helps, and good luck with your project!
I'm typically agnostic when it comes to picking languages. Whatever gets the job done, but, in this case, to figure out what's involved with what you want to do, it's going to be much more than just picking programming languages for your client and backend interfaces.
So, I'm recommending you use Flutter+Firebase as a way to figure out what you need to get done. It supports both iOS and Android out of the box, introduces you to a bunch of components you will need to think about in the future (whether you stick with Firebase or not), and the key here, is that there are tons of articles, youtube videos, and other courses you can take to pick it up pretty quickly. You could even clone an Instagram knockoff from github. Guess what else, it's all free. You might not need to worry as much about the backend since there are client libraries for Flutter/Dart for Firebase.
Some might have different opinions, and like I said, I'm usually agnostic, but in this case, you have a lot to consider. Where are you going to store the data? Are people going to need to login? Will there but customized settings the will save even if I close the app? Yeah, that's just a few questions.
Those are just a few. Lots to consider, so if you want to get something in your hand as soon as possible, try a search for flutter + firebase + chat + Instagram or something like that and have a look.
If this is for learning about how to design the system, then pick the tools are you are confortable with.
Often times, I get stuck picking the tools (and trying to learn about them) vs actually trying to design the system itself.
If you are familiar with React (check out Expo) and Django then I would recommend going with that.
For deploying your backend, I would go with a provider like https://zeit.co/ that automates a whole bunch of deployment steps with their cli tools that you might have to do with AWS.
The above listed tools will do the job, you just need to figure out your architecture(e.g models). How they will all connect. Then you can use a tool you are comfortable with to implement them.
What you need to take a look at is Apache OpenMeetings. It already does what you want, it is open source and well documented and only requires that you design the UI and plumbing required to serve you application.
Let's select right tool you feel you are good at. And selecting tools are used by large community to solve your stuck if encounter
Which is better to learn first as a beginner? Is it true that django is going out of the trend?
I was thinking to learn nodejs but after some thoughts I moved to django and learned most of the basics. Should I learn django more deeply or else drop the django learning and start learning nodejs from scratch?
Please help.
Hey, I have found Laravel to be a great first web framework for me. Mainly, I would look at what you want to build, and go with the framework that will help you get there. It is not about learning a certain framework, but about building apps that help people solve problems. So you should start with a small project that helps people, and find a framework that can help you build that.
I am sure that others will disagree, but this is my opinion.
Don't by trendy, try to learn the basics and learn for future. For beginner Go is a great start, they're having a great documentation. Once you get Go, backend development wouldn't be a problem. I'll suggest you not to use and framework or library at the beginning. Do things from scratch, it may sounds inefficient, but hey! you'll learn more than others. Afterwards you'll be also able to do application development in Go.
Telegram Messenger has frameworks for most known languages, which makes easier for anyone to integrate with them. I started with Golang and soon found that those frameworks are not up to date, not to mention my experience testing on Golang is also mixed due to how their testing tool works. The natural runner-up was JS, which I'm ditching in favor of TS to make a strongly typed code, proper tests and documentation for broader usage. TypeScript allows fast prototyping and can prevent problems during code phase, given that your IDE of choice has support for a language server, and build phase. Pairing it with lint tools also allows honing code before it even hits the repositories.
1. Type safety and inferred types
Go is type safe by default, which allows you to right more reliable code and have better developer tooling, plus with the :=
operator, you can initialize a variable without having to define its type because it automatically gets its type from the initial value.
2. Performance
There isn't much to be said here, but on most counts go beats both Python and Node.js on performance.
3. Documentation
I'm not talking about the Go language itself, although it does have good docs. I'm talking about Go's auto generated documentation tool, which allows people to document their packages easily and works amazingly with Go's type system.
4. Compiles to binary
If you are making a local program for somebody and they don't want to download the Go compiler, you can make Go into a native binary.
5. Built for the web
Go has built in Http libraries to rival Express.js and has a HTML/Text templating system.
6. Great Concurrency
Go utilizes Goroutines to help developers utilize multiple threads easily.
Conclusion
Go is an excellent choice for any system code, especially http networking and web backends.
We actually initially wrote a lot of networking code in Kotlin but the complexities involved prompted us to try and compile NodeJS for Android and port over all the networking logic to Node and communicate with node over the Java Native Interface.
This turned out to be a great decision considering our battery usage fell by 40% and rate of development increased by a factor of 2.
As a small team, we wanted to pick the framework which allowed us to move quickly. There's no option better than Rails. Not having to solve the fundamentals means we can more quickly build our feature set. No other framework can beat ActiveRecord in terms of integration & ease-of use. To top it all of, there's a lot of attention paid to security in the framework, making almost everything safe-by-default.
C# and .Net were obvious choices for us at LiveTiles given our investment in the Microsoft ecosystem. It enabled us to harness of the .Net framework to build ASP.Net MVC, WebAPI, and Serverless applications very easily. Coupled with the high productivity of Visual Studio, it's the native tongue of Microsoft technology.
Hey guys,
My backend set up is Prisma / GraphQL-Yoga at the moment, and I love it. It's so intuitive to learn and is really neat on the frontend too, however, there were a few gotchas when I was learning! Especially around understanding how it all pieces together (the stack). There isn't a great deal of information out there on exactly how to put into production my set up, which is a backend set up on a Digital Ocean droplet with Prisma/GraphQL Yoga in a Docker Container using Next & Apollo Client on the frontend somewhere else. It's such a niche subject, so I bet only a few hundred people have got a website with this stack in production. Anyway, I wrote a blog post to help those who might need help understanding it. Here it is, hope it helps!
Node.js has been growing in popularity, and the ability to access the global pool of Javascript developers is great. There is a decreased amount of effort for people to work across the frontend and backend, and the language itself is easy and works well for many common use cases.
Go was the other serious candidate, but it just hasn't been implemented in as many Production systems yet, and the best Go engineers I've known have been hackers, whereas we're building a robust analytics platform that requires more caution. Type safety is easily added with TypeScript, and NPM is awesomely handy.
When developing a new blockchain, we as a team chose Go lang over Java and other candidates, due to Go being (a) natively suited to concurrency - there are primitives in the language itself (goroutines, channels) that really help with reasoning about concurrency (b) super fast - build time, running, testing are all much faster that Java, this gives a far superior developer experience (c) shorter and stricter than Java - code is much shorter (less verbose), and there is usually one good way to do things, and even the code formatter that is bundled with Go is very opinionated - over a short time this makes reading other people's code far smoother than having to deal with different styles.
You should be aware that Go presently (v1.13) lacks Generics.
At the start of Rookout, we used to have a giant Python monolith and it started being hard to maintain - we realized that using Kubernetes, it would be easy enough to have multiple micro-services each responsible for their own tasks.
After almost a year of micro-services, we are slowly slimming it down to a Golang backend with a NodeJS GraphQL facade for easier frontend development.
NodeJS has the most popular and better options for GraphQL, and it is for a reason.
Between having protobuf schemas between our services, a GraphQL schema to manage our queries, and a very durable backend in Golang, we are able to do anything we want and handle large scale very easily.
I chose Golang as a language to write Tango because it's super easy to get started with. I also considered Rust, but learning curve of it is much higher than in Golang. I felt like I would need to spend an endless amount of time to even get the hello world app working in Rust. While easy to learn, Golang still shows good performance, multithreading out of the box and fun to implement.
I also could choose PHP and create a phar-based tool, but I was not sure that it would be a good choice as I want to scale to be able to process Gbs of access log data
Pros of Golang
- High-performance552
- Simple, minimal syntax396
- Fun to write363
- Easy concurrency support via goroutines303
- Fast compilation times273
- Goroutines195
- Statically linked binaries that are simple to deploy181
- Simple compile build/run procedures151
- Great community137
- Backed by google137
- Garbage collection built-in53
- Built-in Testing47
- Excellent tools - gofmt, godoc etc44
- Elegant and concise like Python, fast like C40
- Awesome to Develop37
- Used for Docker26
- Flexible interface system26
- Great concurrency pattern25
- Deploy as executable24
- Open-source Integration21
- Easy to read19
- Fun to write and so many feature out of the box17
- Go is God17
- Powerful and simple14
- Easy to deploy14
- Its Simple and Heavy duty14
- Concurrency14
- Best language for concurrency13
- Safe GOTOs11
- Rich standard library11
- Clean code, high performance10
- Easy setup10
- High performance10
- Simplicity, Concurrency, Performance9
- Cross compiling8
- Single binary avoids library dependency issues8
- Hassle free deployment8
- Used by Giants of the industry7
- Simple, powerful, and great performance7
- Gofmt7
- Garbage Collection6
- WYSIWYG5
- Very sophisticated syntax5
- Excellent tooling5
- Keep it simple and stupid4
- Widely used4
- Kubernetes written on Go4
- No generics2
- Looks not fancy, but promoting pragmatic idioms1
- Operator goto1
Pros of Node.js
- Npm1.4K
- Javascript1.3K
- Great libraries1.1K
- High-performance1K
- Open source805
- Great for apis486
- Asynchronous477
- Great community423
- Great for realtime apps390
- Great for command line utilities296
- Websockets84
- Node Modules83
- Uber Simple69
- Great modularity59
- Allows us to reuse code in the frontend58
- Easy to start42
- Great for Data Streaming35
- Realtime32
- Awesome28
- Non blocking IO25
- Can be used as a proxy18
- High performance, open source, scalable17
- Non-blocking and modular16
- Easy and Fun15
- Easy and powerful14
- Future of BackEnd13
- Same lang as AngularJS13
- Fullstack12
- Fast11
- Scalability10
- Cross platform10
- Simple9
- Mean Stack8
- Great for webapps7
- Easy concurrency7
- Typescript6
- Fast, simple code and async6
- React6
- Friendly6
- Control everything5
- Its amazingly fast and scalable5
- Easy to use and fast and goes well with JSONdb's5
- Scalable5
- Great speed5
- Fast development5
- It's fast4
- Easy to use4
- Isomorphic coolness4
- Great community3
- Not Python3
- Sooper easy for the Backend connectivity3
- TypeScript Support3
- Blazing fast3
- Performant and fast prototyping3
- Easy to learn3
- Easy3
- Scales, fast, simple, great community, npm, express3
- One language, end-to-end3
- Less boilerplate code3
- Npm i ape-updating2
- Event Driven2
- Lovely2
- Creat for apis1
- Node0
Sign up to add or upvote prosMake informed product decisions
Cons of Golang
- You waste time in plumbing code catching errors42
- Verbose25
- Packages and their path dependencies are braindead23
- Google's documentations aren't beginer friendly16
- Dependency management when working on multiple projects15
- Automatic garbage collection overheads10
- Uncommon syntax8
- Type system is lacking (no generics, etc)7
- Collection framework is lacking (list, set, map)5
- Best programming language3
- A failed experiment to combine c and python1
Cons of Node.js
- Bound to a single CPU46
- New framework every day45
- Lots of terrible examples on the internet40
- Asynchronous programming is the worst33
- Callback24
- Javascript19
- Dependency hell11
- Dependency based on GitHub11
- Low computational power10
- Very very Slow7
- Can block whole server easily7
- Callback functions may not fire on expected sequence7
- Breaking updates4
- Unstable4
- Unneeded over complication3
- No standard approach3
- Bad transitive dependency management1
- Can't read server session1