Need advice about which tool to choose?Ask the StackShare community!
Go vs Rust vs Swift: What are the differences?
Introduction
This markdown code provides a comparison between Go, Rust, and Swift programming languages by highlighting their key differences.
Garbage Collection and Memory Management: Go and Swift both have automatic garbage collection (GC) mechanisms, while Rust employs a system of ownership and borrowing. Go's GC helps manage memory automatically, reducing the burden on developers. In contrast, Rust's ownership and borrowing system enable safe concurrent programming without a GC. Swift offers a hybrid approach by utilizing Automatic Reference Counting (ARC) along with optional manual memory management.
Concurrency Models: Go was specifically designed to support scalable and efficient concurrency. It provides Goroutines and channels as built-in features to easily handle concurrent operations. Rust offers lightweight threads called "async/await" that enable asynchronous programming, ensuring memory safety without sacrificing performance. Swift also has support for concurrency through the "async/await" model, enabling developers to write asynchronous code more simply and safely.
Error Handling: Go follows a distinct error handling pattern by utilizing multiple return values. It encourages explicit checking of errors, making it less prone to error handling neglect. Rust employs the concept of "Result" and "Option" enums for handling errors, ensuring that developers explicitly deal with potential errors. Swift incorporates a more traditional try-catch error handling mechanism, making it easier to handle exceptions.
Safety and Memory Management: Rust's core focus is on memory safety without sacrificing performance. It employs strict compile-time guarantees enforced by the borrow checker, helping prevent memory leaks and data races. Go, on the other hand, provides a simpler safety model with garbage collection for automatic memory management, trading off some performance. Swift strikes a balance by offering safety features such as optionals, type checking, and automatic memory management through ARC.
Language Ecosystem and Tooling: Go has a mature ecosystem and extensive standard library, making it ideal for developing scalable network applications. Rust is gaining popularity due to its modern tooling, secure development practices, and strong community support. It provides fine-grained control over memory and performance optimization. Swift, developed by Apple, has a strong focus on iOS, macOS, watchOS, and tvOS app development. It offers an extensive framework and tooling ecosystem specific to Apple platforms.
Syntax and Language Design: Go prioritizes simplicity and readability, favoring straightforward syntax and minimalistic design. It aims to reduce language complexity while maintaining efficiency. Rust, aiming to be a systems programming language, has a more sophisticated syntax with patterns, macros, and an emphasis on memory safety. Swift, designed for app development, provides a more expressive and readable syntax influenced by modern programming languages.
In Summary, Go focuses on simplicity, efficiency, and concurrent programming. Rust emphasizes memory safety, performance, and control. Swift targets Apple platform development, combining safety, modern syntax, and an extensive ecosystem.
Hi! I'm currently studying Flutter for mobile apps, but I also have a demand to automate some tasks on the web and create backends' for my apps, so thinking about which one of those could be better? Considering the performance and how easy it's to learn and create stuff? (I'm already familiar with .NET stack but want something more "simple" to write)
Definitely Python. Lots of libraries, dead simple syntax. Lots of code examples and reference projects. Elixir is pure functional and takes time to grasp the concepts. Go is great, with simple syntax and performant runtime, but more strict as it is statically typed. For quick coding, nothing beats Python. As you come from .net I’d consider similar approach and be considering Java with SpringBoot as it makes Java faster and much more fun to code web servers
Elixir really has a good performance for the web (and in general). Its framework Phoenix for the web is a great tool, easy to install and to use, with features for websockets (and Pub/Sub) or LiveView to write reactive and real time app with only HTML (and Elixir) so basically everything is in one place
It can take some time to learn a few things in Elixir but I really think it's worth it, and it's very easy to go distributed and concurrent with Elixir. Also it's easier to code quickly with some features like the pattern matching or some operators like the pipe or the capture one
And in the case you need it you can still connect and interface Python and Elixir pretty quickly, and now Elixir has a lot of different frameworks : web, embedded or even neural networks now
Never went far with Go but I have some trouble with its syntax, I find it a bit messy
I don't have a lot of experience with the web with Python but I don't have a good experience with the little I did
Judging your previous experience we will benefit from Golang in terms of portability and speed. If you want to go simplier use Python. If it's only scripts use Python.
Hey Vitor, You can use Node and Express JS to create a backend for your app. You can create REST APIS to connect your front end with the backend. It is a very simple and scalable solution for building backend web apps.
Hey, 👋
My name is Brayden. I’m currently a Frontend React Developer, striving to move into Fullstack so I can expand my knowledge.
For my main backend language, I am deciding between Python, Rust, and Go. I’ve tried each of them out for about an hour and currently, I like Python and Rust the most. However, I’m not sure if I’m missing out on something!
If anyone has advice on these technologies, I’d love to hear it!
Thanks.
Rust is still in low demand. It's a great language but you'll have a hard time finding jobs. Go is the mix of both Rust and Python. Great language with modern features, fast, scalable, fun to write, and at the same time it has high demand (not as much as python).
Python on the other hand is a language that you can't go wrong with. Look around you and see what your job market prefers. If there isn't much difference to you personally, pick the one with more demand.
All of these are solid options, however considering your expertise currently, I would probably suggest Node.JS considering your past experience with JS. However Python offers a similar development environment to JS in my opinion, and Go is a good sort of intermediate between Rust and Node.JS and Python. It's fast, but not as fast as Rust, and offers a development experience that combines C-styled languages (like Rust), and Python-y languages... So: Rust for the fastest, Node for familiarity, Python for ease of development, and Go for a good middle ground. I have used all in personal projects... If you use Go, I suggest a easy to use web server framework like Fiber.
Rust is a challenging choice, but worth to be chosen. It has strong memory-safety and type-safety, this gives you no bother about those errors. However, static typing languages often slow our developing speed down in early stage. In that case, it's effective to write prototype in an easy language like Python, and rewrite it in a hard language. It's important not to be afraid to throw away first code you write.
The other answers are excellent, but I want to be a bit of a contrarian and say you should learn Rust. While the number of jobs for it are (relatively) low(er), it is certainly expanding and you'd be surprised at which companies do use Rust (Discord, for example, is starting to move away from Golang to Rust!).
But the main reason is that learning Rust itself will teach you a lot about systems design (/backend) because of its borrow checker. You can try out a lot of ideas and make a lot mistakes and the borrow checker will always be there guide you to a better solution (thereby teaching you in the process).
Also, I wouldn't underestimated how important managing memory (and memory safety) is. While Golang is great in some ways, it doesn't protect you from pushing memory leaks into production. And eventually you'll come upon a scenario where you'll have to make your Python code run faster and the optimizations you'd have to do won't look pretty (or be very Pythontic).
And Rust is freakin fast! If you have Rust, you wouldn't need any other language for the backend (or any other systems level code). Check this blog post: https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f?gi=dd8bc5d669d. Discord found that even after spending months optimizing Golang code it still wasn't fast enough. But unoptimized, first-draft Rust code was (is) faster by an order of magnitude!
Hi
I want to build a tool to check asset availability (video, images, etc.) from third-party vendors. These vendors have APIs. However, this process should run daily basis and update the database with the status. This is a kind of separate process. I need to know what will be the good approach and technology for this?
hi - I think this depends on how you want to provide the information to the user. If you want to build a Wordpress-plugin: PHP If you want to build your own website: Python+Django / PHP / JavaScript+Node.js As Desktop application?
for what technologies you should use, this is depend on what technology do you prefer? your should think best structuing for your code because each API vendor has different to a nother one so it's better no merege code vendores together. your code must be using SOLID principle pattern and some design pattern such as Factory Pattern
The major advantage of Go is that you can run queries in parallel. Fire off a Go thread for each vendor and each thread can check the availability of assets from a specific vendor and update the database. Go supports hundreds of threads with ease.
your decision depend on what language do you know. if you know php you can use laravel framework
Hi, I would recommend Go because of strongly-typed nature which makes a developer more productive as it is less error prone compared to the other dynamic-typed language. Go also has cron-job library(powered by goroutines) that can help with your automated tasks.
I was thinking about adding a new technology to my current stack (Ruby and JavaScript). But, I want a compiled language, mainly for speed and scalability reasons compared to interpreted languages. I have tried each one (Rust, Java, and Kotlin). I loved them, and I don't know which one can offer me more opportunities for the future (I'm in my first year of software engineering at university).
Which language should I choose?
I will highly recommend Kotlin. I have worked with all three intensely and so far the development speed and simplicity is the best with Kotlin. Kotlin supports coroutines out of the box. Now, it isn't something that can't be implemented in other languages but Kotlin makes it super easy to work with them. Kotlin has a bit of learning curve, so, by the time you can actually use it idiomatically chances are that you will get proficient in Java too. But once you get it, you get it, then there is no other language ;) Kotlin is backed by Google and Jetbrains team so you can expect latest programming features and good community support.
It depends on which level and use cases you prefer to work at. Close to the machine? Rust is great but if you need to find more job opportunities, then take C/C++. Java has many job positions but I suggest Kotlin over it. Think about it as a better Java, but fewer job positions. Do you want to do your own projects? So a productive language like Ruby is way better. Like to program front-end apps? Take JS. Find your passion.
As you certainly know, there are languages that compile in meta-code for Virtual Machines (Java, C#, Kotlin) and languages that compile in Machine Language (Go, Rust). Apart specific domains (blockchain, IoT embedded software, AI, cloud) almost no-one uses languages that compile in machine language, for a series of reason, most of all security and portability. So, if you are going to learn for business go with Kotlin - Java is a bit ancien regime. If you seriously need to learn a language that compiles in ML - for example you will code for IoT - go with Go - or Rust - but keep in mind that Rust is much less used than Go. PS: Kotlin also compiles in ML, but I would choose a language designed for that, instead of one that compiles "also" in ML. PPS: Some Virtual Machines - ie: GraalVM - allow you to compile Java in ML. The world of IT is beautiful.
If you want a compiled language then go for Rust. It takes a certain mindset to get your head around its memory management system and the way it handles "borrowed" memory. However, it will generate blindingly fast code that you can cross-compile for other platforms. As a systems programming language I highly recommend it. Take time and learn it.
Java is only compiled to bytecode, not to machine code. So it executes in the Java Virtual Machine. DOn't think that its not fast, because the latest incarnation are very fast indeed. For most practical purposes, users of your code won't notice any difference. There are a heck of a lot of features in Java that you either have to import via crates in Rust, or write yoursef. So productivity-wise, Java may well beat Rust.
Kotlin is a Java-lookalike. It's a nice, and succinct version of Java and is totally interoperable. But its a bit niche, and for me it fails because my dev environment of choice (Spring Tool Suite) doesn't really play well with Kotlin. To use it you would be well advised to use iDeaj. I have used kotlin, and I like it, but not enough to ditch all my Java code.
Other contenders, depending on your platform of choice are Golang, C, C++, and C# (available as Mono on Linux systems).
I use Rust and Java and if you need a compiled language I recommend Rust.
I'd say Rust's knowledge will be more valuable in comparison. You can work in Blockchain development, compile to WASM (WebAssembly). There is a new JavaScript/TypeScript runtime named Deno (by the creator of Node.js) that has its backend in Rust.
I would go with Kotlin. It is pretty hyped currently.
You can use Kotlin for a lot of application types. To name some:
- Kotlin Multiplatform with Gradle
- Ktor (https://ktor.io)
- Spring Boot
- Kotlin JS (as you already know Javascript, you might like this one)
The code is also really concise, readable and modern. It also provides many features that you will find in many other programming languages.
All those are nice languages, but Rust is harder to learn properly and has a smaller ecosystem. If you want to work in system programming (like hardware drivers) Rust is probably your choice. Otherwise, Java/Kotlin ecosystem is much larger and gives much more possibilities (maybe excluding low-level system programming).
When talking about Kotlin and Java, both are good. But Kotlin, again, gives much more opportunities. Kotlin-JS gives you browser applications, Kotlin-Native allows to compile to native application (and interop with them). Kotlin-WASM will be available shortly. Rust is better than Kotlin-Native for native development tight now, but not by far and it makes sense only if you are focusing only on native development.
I'd recommend you to take a look at Java and Kotlin, the first due to the number of companies that actively use it in your products. Kotlin is gaining adept since it is fully compatibly with the Java ecosystem but usually requires less code to do the same (ignoring other benefits of the language). Another benefits of the Kotlin is that it is in fact multiplatform, where you could use the same syntax to code for mobile, web and backend applications. The drawback of Kotlin, is the number of open jobs that exists currently compared to Java, but I pretty sure that it will change in the near future.
I am a beginner, and I am totally confused, which of these 3 languages to learn first. Go, Rust, or Python. As my studies are going which of them will be easy to learn with studies that is, I can learn and do my studies also. Which one of them will be easily handled with my studies, and will be much much useful in future?
Python is a great language to learn as a beginner. However, Go is really easy to learn as well and has a much more powerful standard library that will allow you to build very complex and powerful applications in the future. Go is becoming a standard in Cloud computing and concurrency. Both of which are very advanced but important.
I'd definitely start with Go. I know Python, Go and quite a few other languages.
Rust is not easy to learn as a beginner.
Python has way too many features to be called "easy" to learn. While it is very forgiving to beginner mistakes it feels like playing in a puddle of mud. It does not teach you clean programming at all. Unless of course you like messy.
Go on the other hand is very easy to learn. As a professional you can learn the entire language in under 2 hours. I have already given the tour of Go (https://tour.golang.org/) to complete beginners and they went through it very thoroughly and thereby knew the entire Go language in less than 5 days. While it is very easy to learn and very easy to read, it is quite strict on other things, guiding you to write clean code. For one it is a typed language and it is good to learn very early about types.
Knowing the entire language is of course not all there is to know. There is the standard library and a lot of other libraries to get to know in every language. Also one has to learn patterns in every language, get experience on how to structure code, dig deeper into the language itself to understand its inner workings, etc. That takes years in every language.
That being said, it depends very much on what you want to do with a language. If you want to go into ML and science you definitely need Python. If you want to go into cloud computing, distributed servers (which in my opinion any server should be nowadays), use Go. If you want to do systems level programming, e.g in hardware programming, use Rust.
I have experience in all three languages, and you should learn python first. These are three different languages (read: tools) to solve different problems you may have. Python is a high level language you can use for writing cross-platform scripts, web servers, AI, websites (e.g. Django) and the list goes on. Python can be used for most programming tasks while being the easiest to learn of the three and probably the most productive as well.
A lot of tech companies start out with Python for their web services, but due to Pythons slow speed and the pain that comes with dynamically typed languages when the code base grows, switch to Go later on when they need to scale. Go is a systems language that thrives when used for high performance cloud/web or networking services. Go is used in performance critical networking situations such as Twitch's streaming services and Uber's geofence services. It's also very clean and simple syntax that makes it very easy to quickly understand what code does.
Python is an interpreted language and Go is a garbage collected language, but Rust is a highly performant and reliable compiled programming language without the extra baggage of runtime memory management. Rust forces you to follow coding patterns that assure memory safety. This makes Rust a perfect fit for high performance algorithms, game engines or safety-critical systems, but would be overkill for web servers or scripts on modern hardware.
If all you want is a gentle intro and have access to tools and libs that can help with your tasks, Python is the way to go. It's ecosystem is huge and the language is easy to pick up. However, if you are aiming to get into software industry, I'd highly recommend you also pick up another classic language like C++/C#/Java. It really helps you cement some CS & programming fundamentals and get more familiar with the concept of software design and software architecture. Not saying you cannot achieve good architecture in Python or Go, but traditionally you have more materials covering these classic OOP languages. And once you learn them, you can apply your knowledge to other languages and it helps you understand other languages faster.
Rust is probably a bad choice for starting out. It is a low level language where garbage collection is not done automatically, and has to get you thinking about all the technical aspects. It is statically typed and compiled, so it's very strict with how you code. I do love Rust though, it's a nice language. Golang is also compiled and statically typed, but it aims to be for quick development, which makes it a better choice for starting out.
Python though can be great for starting out and getting a hold on how to program. You don't need to worry about things such as types, garbage collection, or an overwhelming amount of data types. Since I'm a JavaScript fanboy I can't help but say another great popular choice to start is JavaScript 😁
Python has the broadest reach as it's been around the longest; rust is much more difficult for a beginner to learn; I work with Go every day and it's probably the most productive general use language.
If you start learning programming I'd suggest Python language. I have no experience with Go and Rust so I cannot give you advice for them.
Learn/start with C; don't rush after buzz words. Python is easy to learn but you would not get the underpinnings of memory and pointers, an important aspect of programming.
I'd choose python because with a good knowledge of python and it's libraries, you could do literally anything. Also it has a relatively simple structure, so it won't be tough for a beginner.
Later on if you wish to learn Rust and Go, please do by all means.
I agree with most of the other answers here. Python is the best choice because it is super user-friendly, has an easy syntax, and can do many complex things in relatively fewer lines.
While Rust is a more recent and a great language nonetheless, it is slightly more complicated as it involves compiling and the syntax isn't so great.
And Go is the not a great choice either. While it has a decent syntax, keep in mind that Go won't be of much use unless you plan on working in Google. Even if you want to learn it, you can do so later.
I hope this helped you in making your decision, and welcome to the world of programming! I hope you enjoy.
Study, machine learning = Python | High performance computing, safety-oriented programming = Rust | Backend, feel productive with less runtime performance drawback = Go
Python is the best programming language for starting out as it is quite easy to learn, but it also is very powerful and you can do plenty with it. It will be useful for a long time. Python is my recommendation.
Go and Python are going to be much easier to learn than Rust. The memory management for Rust is pretty hard to wrap your head around when you are first learning how to do basic things with the language. Get familiar with programming first, then learn Rust.
Python is a great language to start programming with, there is an awesome python course on coursera by Dr. Charles Severance called Programming for everybody, check it out :)
Python is the easiest of the languages to learn, and while the slowest in production, it will teach many of the basic fundamental concepts of programming, especially if you're not going to be doing anything low level or at a system level.
Python, because its the easiest to learn as a beginer. Its often called "English without grammar" because its terms and writing style is quite similar to English. Python also has a diverse range of applications like Web App, Desktop App, Data Science etc
Hey guys, I learned the basics (OOP, data structures & some algorithms) with Python, but now I want to learn iOS development. I am considering to learn Swift, but I am afraid how the native mobile development will die out because of the cross-platform frameworks and reviews. My idea is to learn web development first and then learn React Native, and after all of that, finally Swift. What do you think about this roadmap? Should I just learn Swift first due to the pros of the native apps?
Native apps are not going to die. Especially not Swift because now Swift can be used to develop cross platform macOS and iOS apps due to the new macs having M1 chips.
I would suggest to bet more on Swift! I have developed act in React and Javascript in the past and played around with Swift a little... the performances of native code vs Javascript are way too slow compared to swift native app!
Now even more than ever M1 chip will give a boost, but if it gives a boost to JS it will give a boost also to native apps. I would seriously consider Swift more than Javascript, React or even Electron!
If asking about employment opportunities, native will never die out. There will always be opportunity for work in native mobile applications. There are also many advantages of using native over cross platform such as always having access to the latest APIs and developer libraries that may not be available to cross-platform without some native development involved or can wait until someone develops a bridge for you.
If you are asking about what you should develop with first? It really depends. React-Native is great for building proto-types or basic MVP application that doesn't require any of the latest and greatest features Apple has to offer at the moment. But if you're asking what to learn? I would say native will always give you a larger advantage as it will give you a good foundation in mobile development and provide you access to the latest native libraries. It is also a useful skill that can give you an edge in cross-platform mobile like react-native because you will most definitely encounter a situation where you will have to go down to the to native side to extend functionality or utilize APIs that are not yet out of the box.
The decision comes down to your goals and needs.
If you want to be able to create any kind of iOS app, simple or complex, learn Swift. It's indispensable if you're building specialised apps like video editing, augmented reality, machine learning or anything that uses iOS-specific APIs such as App Clips.
But if you just want to create apps that make HTTP requests and display static content such as text or basic video and music, React Native would do just fine, and you can publish the same code to Android. This is a no-brainer choice if you're on a low budget.
And if you know both, you can use both in the same app. You can add React Native screens or components inside a Swift app.
"Should I just learn Swift first due to the pros of the native apps?".
React Native builds Native Apps. Technologies like ionic
does NOT build native apps, but React Native does it.
Learning Swift seems to be a really bad idea from my point of view. Learning JavaScript is all what you need. Why? Because then Frontend, Backend, and Mobile Dev, is simple, because it's all JavaScript.
Mobile Native Development Apps will never die. Cross Plataform like React Native only exists to save time and costs for startups mainly, which is extraordinary, and indispensable often of course. But when the App get popular enough, it will probably will move to Native Development. Several improvements.
Less than 20% of the market is IOS, the rest is Android. Any developer must produce for Android and maybe support IOS. If you prototype on IOS you have to restart again for Android. React and JavaScript will run on IOS.
I need some advice to choose a language for back-end development. Right now, my REST APIs were created by using Flask/Django, and I'd like to create a more reliable and more efficient API with static typing. On the one hand, Go is young, very light, and syntax like Python's, but C# has a large number of libs and more built-in methods. Which is the best solution today?
It depends.
From times to times I asked or was asked that same question. Technology aside, it's important to consider the skills and expertise that the dev team has. Whether you use language A,B or C or framework X,Y and Z, if your team has a strong background and experience with something make it count too.
I would recommend Go simply because as you mentioned, it's super light. No need to bring in the whole .NET suite to get a simple REST API up and running. Even if your API is a bit complex, Go should be able to handle it.
I started out with C# and .NET and I loved it. In my opinion, it was the perfect way to start learning the fundamentals of software development however I always felt like I was at a disadvantage when I was doing .NET development. Granted, .NET Core is now open-source and cross-platform, but I moved to Node.js simply because it is incredibly popular. I never thought I'd learn to love JavaScript it the way I did with C#, but I learned to love it pretty quickly, especially once I started using TypeScript. You get all of the benefits of C# and JavaScript all in one. If you've built a REST API with Python/Flask/Django, you'll be able to learn Node.js/Express/TypeScript well enough to migrate your API very fast and it's incredibly easy to host for free on any number of services.
I'm new to Go, I've got very little experience but the 'feel' of Go, isn't like Python in my opinion. Go has a pretty steep learning curve, much steeper than C# in my opinion. So if you are willing to consider Node/Express/TypeScript, I think you may really like it. If you're picking between Go and C#, I'd go for C# as of today, but once I am more comfortable with Go (which I anticipate being a slow process) I may change my mind.
At this moment in time, in late 2020- Node/Express/TypeScript feels like the obvious choice to me as a former C# developer.
The best language for you is the one that you know best!
Its a bit of a guess, but from your question and the difficulties you have with Python it seems to me the problem you describe is the manifestation of a bad design/architecture/code quality. These are not the problems of a language itself!
The experience you gained over the past years with your current programming language will outmatch any benefits of another language that you start from zero.
Because in the end of the day languages aren't all that different when it comes to fullfil the same task, it's more the tools, framework and ecosystem for a particular problem that make a difference.
I worked with Java, C#, Go and recently in Phyton, and I would choose Phyton over Go for WebApps, even I like compiled languages more. Go is a very simple language, I would even say maybe too simple. I can't stand all those go boilerplate if err checks, the broken filesystem, the date/time mess and many more things that aren't actually relevant for business application at all. Go has its advantages but not for WebApps.
Keep the lang and improve your skills and architecture you will benifit more from it than from a new language.
I recommend Go for backend. It's younger than C# doesn't mean it's not mature. It's already mature enough to be run on production. You can see there are already many companies in the world adopting Go as their backend business logic or tooling. I can name a few like Github, Shopify, uber, twitch, and many more. It's easier learning curve, low entry barrier, better performance than C#, better memory consumption than C#, since there's no VM/runtime needed. It's suitable for large scale system and large codebase for readibility and long maintainability. It's simpler than C# since no class, inheritance(this can cause hard to maintain software), exception, etc. You can still implement OO way in Go without those feature. Simple file structure, only main files and package files. It compiles to single binary and easy to deploy and work around it, unlike C# who compiled to IL and you need to wrap all those IL files to be run inside separated web server(even .Net/.Net Core platform provide built-in web server). For libs, don't worry, there are many open source libs you will found on Github and already adopted by many companies. Go is employed in personal, startup, even corporate level.
I suggest Go because it has a simple and clean ecosystem. The language is simple. You don’t need complex configs or installs either. You’ll be up and running very quickly. It doesn’t have as much as .NET but its standard library is more than sufficient for RESTful APIs. Concurrency is much, much easier too.
C# I’d definitely recommend later on. The .NET framework, especially core, is extremely powerful and there’s little you can’t build with it. Go won’t take you long to be productive with.
The database your are going to connect and the needed libraries could decide. Because both are awesome languages.
If you want to stick with python you may want to consider Fastapi. It uses Pydantic to give you strongly typed models and validation. It generates openapi docs for you out of the box. They have good documentation as well and they claim it is really fast.
I have some systems on production using both languages. I tend to use golang if the API is small or medium size, but if I am going to build a large system definitively I use c#(asp netcore).
I would recommend C#, particularly Simplify.Web web-framework. C# is easy to start with (especially .NET Core). Simplify.Web is also easy to start with, no extra setup required for simple API, but on the other hand you have power of C# and full control over your API with ability to extend.
So, I've been working with all 3 languages JavaScript, Python and Rust, I know that all of these languages are important in their own domain but, I haven't took any of it to the point where i could say I'm a pro at any of these languages. I learned JS and Python out of my own excitement, I learned rust for some IoT based projects. just confused which one i should invest my time in first... that does have Job and freelance potential in market as well...
I am an undergraduate in computer science. (3rd Year)
I would start focusing on Javascript because even working with Rust and Python, you're always going to encounter some Javascript for front-ends at least. It has: - more freelancing opportunities (starting to work short after a virus/crisis, that's gonna help) - can also do back-end if needed (I would personally avoid specializing in this since there's better languages for the back-end part) - hard to avoid. it's everywhere and not going away (well not yet)
Then, later, for back-end programming languages, Rust seems like your best bet. Its pros: - it's satisfying to work with (after the learning curve) - it's got potential to grow big in the next year (also with better paying jobs) - it's super versatile (you can do high-perf system stuff, graphics, ffi, as well as your classic api server) It comes with a few cons though: - it's harder to learn (expect to put in years) - the freelancing options are virtually non-existent (and I would expect them to stay limited, as rust is better for long-term software than prototypes)
I suggest you to go with JavaScript. From my perspective JavaScript is the language you should invest your time in. The community of javascript and lots of framework helps developer to build what they want to build in no time whether it a desktop, web, mobile based application or even you can use javascript as a backend as well. There are lot of frameworks you can start learning i suggest you to go with (react,vue) library both are easy to learn than angular which is a complete framework.
And if you want to go with python as a secondary tool then i suggest you to learn a python framework (Flask,Django).
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
We are converting AWS Lambdas from Java due to excessive cold start times. Usage: These lambdas handle XML and JSON payloads, they use s3, API Gateway, RDS, DynamoDB, and external API's. Most of our developers are only experienced in java. These three languages (Go, Node.js, and Python) were discussed, but no consensus has been reached yet.
I've worked with all three of these languages and also with Java developers converting to these languages and far and away Go is the easier one to convert to. With the improved cold-start times and the ease of conversion for a Java developer, it is a no-brainer for me.
The hardest part of the conversion though is going to be the lack of traditional Classes so you have to be mindful of that, but Go Structs and interfaces tend to make up for what is lost there.
Full Disclosure: I'm a 95% Go convert (from Python) at this point in time.
Although I am primarily a Javascript developer myself, I used Go to build AWS lambda in a similar scenario to yours. AWS libraries felt better integrated on the Go side, I believe due to the language itself (e.g. how JSON objects are handled in go). Besides that performance of Go is much superior. But on the cons side; community is far smaller around Go, compared to Javascript. That is easy notice if you look at repos of community-maintained libraries for Go. That can feel a bit unreliable.
Go would provide the easiest transition for Java programmers -- its IDE/tooling is second to none (just install Goland) and the deploy/distribution story is extremely clean and lends itself to work well in lambda: single, static binaries with quick startup. No need to set up a full environment or package dependencies on your lambda AMIs, just copy a file.
I was initially going to suggest JavaScript due to the smaller size needs of AWS Lambdas code and the larger range of libraries and community available (and to avoid Python for this). But I have to agree with the recommendations and rationale of @ayildirim above and I think you should choose any reasonable language that is low-overhead, fast startup, and best supported by AWS Lambda, and that is probably Go. I don't think you are likely to go wrong with that, while you can potentially with the others.
So I'd agree, on the strength of AWS Lambda support and the solid performance of Go, it seems like your best choice here for Lambdas (and I'm going to need to consider that myself going forward... pardon the pun).
If you want to prioritise language familiarity, JavaScript is more like Java than the other choices; and it can be optimised to run very fast. However if you need really fast cold-start times, you can't beat Go since it's compiled. There are other things to consider, such as the massive amount of community packages and help/documentation in the JavaScript ecosystem. Go is newer but seems to be quite popular if you need something that runs fast in a single binary.
We chose React Native over native Android and iOS development because of React Native's cross-platform capabilities. React Native has really matured over the years, developing a native feel, with simple and intuitive APIs. The community is also huge, filling in any gaps in the default APIs. These are also the reasons why we didn't choose other hybrid mobile tools. Largely, other hybrid mobile tools don't have the same mobile feel and close connection to the underlying mobile APIs.
At a larger scale, the control that native development offers beats React Native's simplicity. However, at this early stage, it's worth the trade-off. Maintaining two mobile teams and two mobile apps, as we iterate the product rapidly would not be practical. Plus, there is always the escape hatch of native modules if more control is needed.
As a startup, we need the maximum flexibility and the ability to reach our customers in a more suitable way. So a hybrid application approach is the best because it allows you to develop a cross-platform application in a unique codebase. The choice behind Ionic is Angular, I think that angular is the best framework to develop a complex application that needs a lot of service interaction, its modularity forces you (the developer) to write the code in the correct way, so it can be maintainable and reusable.
Expo was a tool Macombey really wanted to utilize from the beginning. I have been working with React Native since 2016 and originally I had to use simulators in Xcode, install pods on top of node packages, configure certificates, and more abundant objectives that take time away from actual development. As a development studio, we have to move quick and get projects to our clients and partners in a matter of months.
Expo made this easy for us. We now have a mobile app for clients to download and test their project on, there is no need to install pods or configure Xcode, and development is super fast and reliable now.
#rust #elixir So am creating a messenger with voice call capabilities app which the user signs up using phone number and so at first i wanted to use Actix so i learned Rust so i thought to myself because well its first i felt its a bit immature to use actix web even though some companies are using Rust but we cant really say the full potential of Rust in a full scale app for example in Discord both Elixir and Rust are used meaning there is equal need for them but for Elixir so many companies use it from Whatsapp, Wechat, etc and this means something for Rust is not ready to go full scale we cant assume all this possibilities when it come Rust. So i decided to go the Erlang way after alot of Thinking so Do you think i made the right decision?Am 19 year programmer so i assume am not experienced as you so your answer or comment would really valuable to me
Go is a way faster than both Python and PHP, which is pretty understandable, but we were amazed at how good we adapted to use it. Go was a blessing for a team , since strict typing is making it very easy to develop and control everything inside team, so the quality was really good. We made huge leap forward in dev speed because of it.
Context: Writing an open source CLI tool.
Go and Rust over Python: Simple distribution.
With Go and Rust, just build statically compiled binaries and hand them out.
With Python, have people install with "pip install --user" and not finding the binaries :(.
Go and Rust over Python: Startup and runtime performance
Go and Rust over Python: No need to worry about which Python interpreter version is installed on the users' machines.
Go over Rust: Simplicity; Rust's memory management comes at a development / maintenance cost.
Go over Rust: Easier cross compiles from macOS to Linux.
We’re a new startup so we need to be able to deliver quick changes as we find our product market fit. We’ve also got to ensure that we’re moving money safely, and keeping perfect records. The technologies we’ve chosen mix mature but well maintained frameworks like Django, with modern web-first and api-first front ends like GraphQL, NextJS, and Chakra. We use a little Golang sparingly in our backend to ensure that when we interact with financial services, we do so with statically compiled, strongly typed, and strictly limited and reviewed code.
You can read all about it in our linked blog post.
We have a lot of experience in JavaScript, writing our services in NodeJS allows developers to transition to the back end without any friction, without having to learn a new language. There is also the option to write services in TypeScript, which adds an expressive type layer. The semi-shared ecosystem between front and back end is nice as well, though specifically NodeJS libraries sometimes suffer in quality, compared to other major languages.
As for why we didn't pick the other languages, most of it comes down to "personal preference" and historically grown code bases, but let's do some post-hoc deduction:
Go is a practical choice, reasonably easy to learn, but until we find performance issues with our NodeJS stack, there is simply no reason to switch. The benefits of using NodeJS so far outweigh those of picking Go. This might change in the future.
PHP is a language we're still using in big parts of our system, and are still sometimes writing new code in. Modern PHP has fixed some of its issues, and probably has the fastest development cycle time, but it suffers around modelling complex asynchronous tasks, and (on a personal note) lack of support for writing in a functional style.
We don't use Python, Elixir or Ruby, mostly because of personal preference and for historic reasons.
Rust, though I personally love and use it in my projects, would require us to specifically hire for that, as the learning curve is quite steep. Its web ecosystem is OK by now (see https://www.arewewebyet.org/), but in my opinion, it is still no where near that of the other web languages. In other words, we are not willing to pay the price for playing this innovation card.
Haskell, as with Rust, I personally adore, but is simply too esoteric for us. There are problem domains where it shines, ours is not one of them.
With Python + Django it was so much faster to create a typical website like this. Using Go would take to long to launch the initial version. For example, Python could handle complex data type with less line of code. Django also has many built-in libraries and a huge ecosystem of libraries that can be easily used to build a feature.
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.
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 Rust
- Guaranteed memory safety145
- Fast132
- Open source88
- Minimal runtime75
- Pattern matching72
- Type inference63
- Algebraic data types57
- Concurrent57
- Efficient C bindings47
- Practical43
- Best advances in languages in 20 years37
- Safe, fast, easy + friendly community32
- Fix for C/C++30
- Stablity25
- Zero-cost abstractions24
- Closures23
- Extensive compiler checks20
- Great community20
- Async/await18
- No NULL type18
- Completely cross platform: Windows, Linux, Android15
- No Garbage Collection15
- Great documentations14
- High-performance14
- Generics12
- Super fast12
- High performance12
- Safety no runtime crashes11
- Fearless concurrency11
- Compiler can generate Webassembly11
- Macros11
- Guaranteed thread data race safety11
- Helpful compiler10
- RLS provides great IDE support9
- Prevents data races9
- Easy Deployment9
- Real multithreading8
- Painless dependency management8
- Good package management7
- Support on Other Languages5
- Type System1
Pros of Swift
- Ios259
- Elegant180
- Not Objective-C126
- Backed by apple107
- Type inference93
- Generics61
- Playgrounds54
- Semicolon free49
- OSX38
- Tuples offer compound variables36
- Clean Syntax24
- Easy to learn24
- Open Source22
- Beautiful Code21
- Functional20
- Dynamic12
- Linux12
- Protocol-oriented programming11
- Promotes safe, readable code10
- No S-l-o-w JVM9
- Explicit optionals8
- Storyboard designer7
- Optionals6
- Type safety6
- Super addicting language, great people, open, elegant5
- Best UI concept5
- Its friendly4
- Highly Readable codes4
- Fail-safe4
- Powerful4
- Faster and looks better4
- Swift is faster than Objective-C4
- Feels like a better C++4
- Easy to learn and work3
- Much more fun3
- Protocol extensions3
- Native3
- Its fun and damn fast3
- Strong Type safety3
- Easy to Maintain3
- Protocol as type2
- All Cons C# and Java Swift Already has2
- Esay2
- MacOS2
- Type Safe2
- Protocol oriented programming2
- Can interface with C easily1
- Actually don't have to own a mac1
- Free from Memory Leak1
- Swift is easier to understand for non-iOS developers.1
- Numbers with underbar1
- Optional chain1
- Great for Multi-Threaded Programming1
- Runs Python 8 times faster1
- Objec1
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 Rust
- Hard to learn28
- Ownership learning curve24
- Unfriendly, verbose syntax12
- High size of builded executable4
- Many type operations make it difficult to follow4
- No jobs4
- Variable shadowing4
- Use it only for timeoass not in production1
Cons of Swift
- Must own a mac6
- Memory leaks are not uncommon2
- Very irritatingly picky about things that’s1
- Complicated process for exporting modules1
- Its classes compile to roughly 300 lines of assembly1
- Is a lot more effort than lua to make simple functions1
- Overly complex options makes it easy to create bad code0