Need advice about which tool to choose?Ask the StackShare community!
Java vs Scala: What are the differences?
Java is a widely used programming language known for its simplicity, scalability, and extensive libraries. Scala, on the other hand, is a modern and powerful language that runs on the Java Virtual Machine (JVM) and provides advanced features such as functional programming, immutability, and concise syntax. Here are the key differences between Java and Scala:
Object-Oriented vs. Functional Programming: Java is primarily an object-oriented programming (OOP) language, while Scala is a hybrid language that combines object-oriented and functional programming (FP) concepts. Java follows a strict OOP paradigm with classes, objects, and inheritance, while Scala provides powerful functional programming features such as immutable data, higher-order functions, and pattern matching.
Conciseness and Expressiveness: Scala is often considered more expressive and concise compared to Java. It provides more advanced language features like type inference, implicit conversions, and higher-order functions, which allow developers to write code in a more concise and expressive manner. Java, being a simpler language, may require more explicit and verbose code.
Interoperability: Java has strong interoperability with other programming languages and platforms due to its widespread usage and mature ecosystem. It can seamlessly integrate with existing Java libraries, frameworks, and tools. Scala, on the other hand, runs on the Java Virtual Machine (JVM) and can directly use Java libraries. This means Scala can leverage the vast Java ecosystem, enabling developers to reuse Java code and libraries.
Concurrency and Parallelism: Scala provides better support for concurrent and parallel programming compared to Java. It offers features like actors, futures, and parallel collections that make it easier to write concurrent and parallel code. While Java has its own concurrency utilities and libraries, Scala's functional programming features provide more convenient abstractions for concurrent and parallel programming.
Learning Curve: Java has a simpler syntax and a more gradual learning curve, making it easier for beginners to grasp the basics of programming. Scala, with its hybrid nature and advanced language features, has a steeper learning curve, especially for developers who are new to functional programming concepts.
In summary, Java is widely adopted and has a mature ecosystem, making it suitable for enterprise applications, Android development, and server-side development. Scala, with its functional programming capabilities, is well-suited for applications requiring high concurrency, parallelism, and expressiveness, such as data processing, distributed systems, and scalable web applications.
Hello Devs,
I am planning to implement a ETL test system for checking data quality and business use cases. I am confused on what stack to use. Any advice on the below will be very helpful.
- Any existing frameworks and its source code for help
- Any other stack apart from the mentioned stack (that might be suitable)
- Any ideas for features are welcomed.
- The usage of multiple BE stacks.
If you want to create using Python language, Robot Framework is one very helpful tool to improve your test scripting and we have a lot of methods created by the community. If you want to use Javascript, Cypress in terms of benefits is the better option to create and maintain tests, and run and generate reports in many browsers is really easy with them.
I will use Elixir for personal projects. It's productive, reliable, secure, simple, etc. But when performance is critical, I need job opportunities, when I work with mutability, which do I pick? I need advice on which "bureaucratic, mainstream" programming language to pick when wanting performance and jobs. Elixir is often "slow", and it hasn't boomed yet the way Golang and Rust have, so which?
Well for those performant tasks maybe you can use Rust nifs for elixir. Elixir enables to write fault-tolerant, scalable code for concurrent systems, and as such, it is perfect for messaging systems and web applications that might need to handle a lot of users efficiently. But if you need speed you can plug in Rust or write a microservice using Goland/Rust.
Hello Folks, my first time here, and for requesting advice. I am trying to create some automation from my cloud stack on AWS to something more cloud native. I have containerised the services, however, I am stuck at DB, my Data warehouse, and messaging. Would love some recommendations on how can I automate this for some future work too.
I recommend cloud-init for base setup of machines and configuring them.. Its simple (YAML file) and is industry standard. Even works on bare metal as well as cloud.
Hi, I am working as a web developer (PHP, Laravel, AngularJS, and MySQL) with more than 8 years of experience and looking for a tech stack that pays better. I have a little bit of knowledge of Core Java. For better opportunities, Should I learn Java, Spring Boot or Python. Or should I learn Drupal, WordPress or Magento? Any guidance would be really appreciated! Thanks.
Hard to answer it depend on market. Python + Flask + Jinja2 is better that SpringBoot. Java can be paid better now but I think that future is Python. I code very good in PHP, Java, Python - prefer Python for less code and more effects. PHP is little ugly and limited to web.
What do you think about Node JS with React? I feel like this stack is fairly paid more than PHP.
I am also a Laravel developer, in process of transitioning towards Node js.
If you wanna personally connect with me, hit me up at @izshreyansh on twitter.
Actually, I'll add, C++ and C# as well.
Well, I'm into Computer Science since 1996, so I understand a bit of everything plus a lot of different OSs, I study 10 hours per day every day. However back in the 90s we didn't have books or universities about programming, all were passed through if you knew somebody in that profession. Which I did and in that time, he showed me .NET and MySQL, and that offered a lot of jobs also Java. Today you have a lot of options but I'm already discarding new languages as I believe they will jot succeed.
My always dream was to create game, and software. I don't understand all programming concepts and I'm studying all languages at the same time, so I'm heavy loaded. But that keeps me more aware.
I made a choice: use Python for everything but if you want performance, apps, security, compatibility, Multiplatform. What should I choose? The real question here is: which language should I go 100% and that language will teach me all I need about programming BUT without getting lost in that language forever (I discard any Assembly possibility) and one that has full documentation, support and libraries.
In my experience: I found a lot of info for python and java. But hardly I have ever found anything for C lang, C++ and, what about C# (it's only for Windows, is it easy, I saw a lot of documentation). Thanks!!
Python can be linked with C++ both language are similar in many places (using same libraries or concepts to build libraries) - except memory and static types. C++ is more assembler and have different syntax (need 3x-4x coding more).
If you do engineering it is perfect stack - Java is to slow in coding (4x more code) and little faster than Python - whatever it is hard to mix Java/C++ what is easy Python/C++.
In the most program you do not need super performance but if you need C++ is the best and have rich Object Language much richer than Java and more poor than Python. Python is true object language - everything is object.
Whatever sometimes more important is framework than language for specific use.
I would go with Python, it is fast to code, readable and very powerful without giving you too much to think about (e.g. memory management). If you're looking for speed, Cython is a fairly good way to get there, since Python is a C-based language it can be compiled to C using Cython and will get you a very significant boost in speed! You can also make use of C libraries if you prefer. The only downside to Cython over Python is that it is compiled and not interpreted, which can make debugging a pain (but you might find yourself doing most of the debugging in Python before switching to Cython). C languages are a bit of a pain to read up on (API, libraries etc.), but Stack Overflow has you covered in most cases!
All programming languages are cross platform except Java, but even that's not that bad. Performance: C(++), Go, Rust, Java, Ada, OCaml, Haskell, C# Apps: JS, TS, ReScript, Go, C(++), Java, Haskell, C#, Dart Security: Java, Go, Rust, COBOL, C(++), C# Compatibility: Java(due to it's VM), C(++), Go, C# Libraries: Java, Go, C(++), C# Documentation: Java, C(++) (since they are mature) What do you mean without getting lost in the language? I'd not advocate for C(or C++), considering it's hard to understand the memory, and it's for those into programming theory. You are looking for all you need. Go for Java, it has a library for everything, it has a reasonable learning curve, and pretty much you are going to encounter it everywhere- it's like a programming black hole you can't escape.
Basically, I am looking for a good language that compiles to Java and JavaScript(and can use their libraries/frameworks). These JVM languages seem good to me, but I have no interest in Android. Which programming language is the best of these? I am looking for one with high money and something functional.
Edit: Kotlin was originally on this list but I removed it since I had no interest in Android
Clojure is a Lisp dialect, so if you like Lisp that's probably the way to go. Scala is more popular and broadly used, and has a larger job market especially for data engineering. Both are functional but Scala is more interoperable with Java libraries, probably a big factor in its popularity. I prefer Scala for a number of reasons, but in terms of jobs Scala is the clear leader.
Scala has more momentum. It is good for back-end programming. The popular big data framework Spark is written in Scala. Spark is a marketable skill.
If you need to program something very dynamic like old school A.I., Clojure is attractive. You would chose Scala if prefer a statically typed language, and Clojure if you prefer a dynamically typed language.
It's not clear exactly what you mean by "high money", you mean financial support to the language, money paid for a job, economic health of the market the language is positioned on?
In any case, it's very hard to give any advice here, since you'd need to provide details on the intended usage, what sector, kind of product/service, team size, potential customer type... Both languages are very general purpose and decently supported, each have its own pros and cons, both are functional as approach, and neither is really mainstream.
Generally speaking, what are the most important things you expect a junior developer to know and be able to do from day 1 in your respective tech stack? Firm grasp of OOP? SQL? MVC? ORM? Algorithms and Datastructures? Understanding CRUD & the request response cycle? Database design? framework familiarity? Postman? Deployment? TDD? Git? Language-specific knowledge? Other things?
Start with building a solid understanding of computer science fundamentals. Understand the basics of building blocks - memory, processing, storage, networking. Understand what CPU bound, memory bound, I/O bound, network bound processes are. Understand the cost of accessing data from Memory vs. Disk vs Network. Understand how multiple CPU threads help in optimizing the performance of a single machine.
Build expertise on a programming language. You may pick any language of your choice. I would recommend starting with Java / Python. Make sure you know one language really well. Build a strong understanding of Data Structures and Algorithms. You should be able to develop an intuition on when to use what. You may practice DS and Algorithm problems, using the language of your choice, on a competitive coding platform (e.g. Leetcode) or by building your own App!
Next, get familiar with basic cloud computing and distributed system concepts. Here is a good resource for that - https://www.youtube.com/watch?v=p7NkTUyEE1o&ab_channel=JeffreyRichter If you understand the computer science fundamentals well, you will be able to apply those concepts here as well.
Hope it helps!
Ability to read code and willingness to try to reason flow of operations and information. Tools and technologies change, one doesn't need to have them in toolbelt from day one. All things you name are relevant in some contexts, so it's not bad to understand them.
Just learn to learn. Learn to search and develop your logical thinking, that's all you need. No books, no deep study of how computers work, just logic and willingness to learn
For me, it is less of a specific technology you know (although I would prefer you have some knowledge of some of my team stack). It is more the way you get into a problem, the eagerness to learn more, the true sincerity to say "I don't know", the open mind to find solutions in different ways and the "Yes we can" mentality no matter how hard it is.
Most employers don't expect from you to know how to implement CI/CD or any other funcy stuff. As junior developer you should focus on building a good toolset of good software practices & principles. Your soft skills are important as well. Learn about soft skills. Be eager to learn, be humble and show you talent and your creativity through your work. If you want to become a good developer ( at first) and a star engineer (at a later stage) then computer programming (coding) is your number one priority . Coding is like painting. Putting aside your talent, you have to practice a lot and improve your outcome each time. As junior developer you can learn how to write good code by studying existing code found in public git repositories (i e , github). As junior developer you should study some good software principles (i.e., DRY, KISS, YAGNI) and always recall them each time you write software code. As junior developer you should learn about coding standards and conventions. You will have to follow to your company's coding conventions (soon or later) as well as you will realize that you have to write code cosistent to the existing code base. At the end of the day, code consistency matters a lot. You have to improve your code day by day. If you manage to follow some good software practices you will find out that you will need an ORM to work with your database. Then you will realize that you need the X web framework to build your REST API etc. To sum up, you will start building a toolset with a single programming language and some good software practices & principles and then you will put new tools in it day-by-day.
I'm making my university community web service with a team. (6 members myself included)
And we decided to use JavaScript, HTML, CSS (for sure, it's the basic of websites) but couldn't decide for the back end part.
There are tons of languages, tools, etc., but I'm really new to programming, so I'd like to get some help to figure out what tools we need.
So my question is this: are there any good examples of web community services we can mimic the tools or get an insight from them?
Since you're following Python, I would recomend using Django as your main back-end language. If you know Python it would be a great experience. Django is well documented on their official website: https://www.djangoproject.com/ I would also use React for front-end as well. Also this article is worth reading, I think progressive web app is something worth learning these days: https://web.dev/progressive-web-apps/ Hope that helps :)
Since your team is already using JavaScript, there's a great number of examples for backend services written with NodeJS. I'd recommend using Firebase, or any backend as a service (you can use that term to find alternatives), for setting up your backend as it is much easier for newer people to understand and lets you focus on your core application logic, and not provisioning servers, databases, etc.
Since you're team is already using JavaScript, there are alot of examples and open source projects written with NodeJs, so I preffer this language in your backend application and also I am recommended using Mongo DB with It for saving data in it, and also for your frontend application I am recommanded using VueJs.
Since you are already using JavaScript on the front end it would be easy to adopt the MERN (MongoDB, Express, React, NodeJS) stack which s all javascript based making it easy to transfer knowledge with the backend and front end
Kindly I don't find any help that solve this mystery I need more help if it will happen
Make it simple, most of projects doesnt need a AI, ML or big algorithms. If your project just serving end users take it to the web ready compatible. (Javascript, .Net, PHP Laravel)
Hi there. I'm looking to build an employee time tracker web app. This should also be optimized for mobile. I'm trying to figure out what the best stack is for this. I have knowledge of Java, JavaScript, some C#. I don't mind learning a new language for this purpose. Any help or advice would be really awesome! Thanks.
Hi Otensia! I'd definitely recommend using the skills you've already got and building with JavaScript is a smart way to go these days. Most platform services have JavaScript/Node SDKs or NPM packages, many serverless platforms support Node in case you need to write any backend logic, and JavaScript is incredibly popular - meaning it will be easy to hire for, should you ever need to.
My advice would be "don't reinvent the wheel". If you already have a skill set that will work well to solve the problem at hand, and you don't need it for any other projects, don't spend the time jumping into a new language. If you're looking for an excuse to learn something new, it would be better to invest that time in learning a new platform/tool that compliments your knowledge of JavaScript. For this project, I might recommend using Netlify, Vercel, or Google Firebase to quickly and easily deploy your web app. If you need to add user authentication, there are great examples out there for Firebase Authentication, Auth0, or even Magic (a newcomer on the Auth scene, but very user friendly). All of these services work very well with a JavaScript-based application.
As you have knowledge of Javascript, I would go towards Vue/React in Frontend and Node (with suitable framework) with backend. From my point of view Java would be too bloated for suggested kind of an app. I myself use PHP as a backend a lot and React as frontend but moving thoughts towards full stack javascript world.
php is the best for beginners, and one of the best for web development at all, all the host servers can handle it, a basic knowledge in java is not enough for build a web site, but a basic knowledge in php is enough. learn php basics and oop and mvc design pattern or any framework like Laravel (optional), and javascript for frontend (a framework like React or Angular is optional but good) and you will build any web site you want.
We migrated from PHP to Angular/PHP to Angular/Node to React/Node/AWS Lambda. React/Node(Typescript)/Lambda seems to be good so far as we have developed few applications (large and small) using this stack so far. React/Node/Lambda is also good for mobile. If you are planning to use AWS, you can use the S3 bucket to store the frontend and Lambda or EC2 for backend APIs.
We migrated from PHP to Angular/PHP to Angular/Node to React/Node/AWS Lambda. React/Node(Typescript)/Lambda seems to be good so far as we have developed few applications (large and small) using this stack so far. React/Node/Lambda is also good for mobile. If you are planning to use AWS, you can use the S3 bucket to store the frontend and Lambda or EC2 for backend APIs.
For just a time tracker app? I'd recommend going with a cloud-based approach. A couple serverless functions in whatever language you choose, and the front end can be a static website hosted inside a storage service (blob for Azure, bucket for AWS, etc). This will ultimately probably save you a little time, and them a little money on hosting.
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'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.
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 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.
We're moving from Java to Kotlin with our Microservice Stack (Spring Boot) because it is excellently supported by framework and tools and the learning curve is not very steep Kotlin is way more straightforward and convenient to use while providing less boilerplate and more strictness, which finally leads to better code, which is more readable, maintainable and less error-prone. We especially like Kotlin's (functional) data structures, which are, e.g. compared to Scala, easier to understand and don't require deep knowledge in functional programming.
We have chosen a mix of Java and Python for building an open source data observability tool. The application can work as a standalone command line tool with a rich shell interface (using even command completion). The Java ecosystem is more mature when it comes to connectivity to various databases using JDBC. Also picocli with jline3 let us make a very dynamic shell interface with command completion. The definitions of data quality checks that should be executed are defined in YAML files, backed by a YAML (in fact JSON) schema files. Our YAML files can be edited in Visual Studio Code (and other code editors) with support of the code completion. It is possible because all the data model is defined as pure Java classes for which we are generating a YAML/JSON schema. There is still place for Python because it is very popular in the database space. We are simply starting a Python interpreter in the background (from a Java code). Python is used to evaluate validation rules (defined as Python functions) and render SQL queries from Jinja2 templates.
I wanted to develop a student app that possibly could be used by many teams (students from other schools)
I chose Ionic, because:
single codebase: previously, we used React Native for Android and Angular for web/PWA, which was troublesome
portability: runs on PWA (which is important, because iOS license is too expensive for school app), web, Android iOS (+ others, if needed)
full use of web technologies: Next.js, Tailwind, React in this example (in oppose to Flutter/Java/Kotlin)
stability and maintainability: low-entry level due to basic web technologies without new syntax (in oppose to React Native and Flutter), web is really stable and won't lose support (which doesn't have to be true with Flutter/Dart)
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.
I had a goal to create the simplest accounting software for Mac and Windows to help small businesses in Canada.
This led me to a long 2 years of exploration of the best language that could provide these features:
- Great overall productivity
- International wide-spread usage for long-term sustainability and easy to find documentation
- Versatility for creating websites and desktop softwares
- Enjoyable developper experience
- Ability to create good looking modern UIs
- Job openings with this language
I tried Python, Java, C# and C++ without finding what I was looking for.
When I discovered Javascript, I really knew it was the right language to use. Thinking of this today makes me realize even more how great a decision this has been to learn, use and master Javascript. It has been a fun, challenging and productive road on which I am still satisfied.
Obviously, when I refer to Javascript, it is not without implying the vast ecosystem around it. For me, JS is a whole universe in which almost every imaginable tools exist. It's awesome - for real. Thanks to all the contributors which have made it possible.
To be even clearer about how intense I am with Javascript, let's just say that my first passion was music. Until, I find coding with Javascript! Yep, I know!
So in conclusion, I chose Javascript because it is versatile, enjoyable, widely used, productive for both desktop softwares and websites with ability to create modern great looking user interfaces (assuming HTML and CSS are involved) and finally there are job openings.
Python has become the most popular language for machine learning right now since almost all machine learning tools provide service for this language, and it is really to use since it has many build-in objects like Hashtable. In C, you need to implement everything by yourself.
C++ is one of the most popular programming languages in graphics. It has many fancy libraries like eigen to help us process matrix. I have many previous projects about graphics based on C++ and this time, we also need to deal with graphics since we need to analyze movements of the human body. C++ has much more advantages than Java. C++ uses only compiler, whereas Java uses compiler and interpreter in both. C++ supports both operator overloading and method overloading whereas Java only supports method overloading. C++ supports manual object management with the help of new and delete keywords whereas Java has built-in automatic garbage collection.
I am working in the domain of big data and machine learning. I am helping companies with bringing their machine learning models to the production. In many projects there is a tendency to port Python, PySpark code to Scala and Scala Spark.
This yields to longer time to market and a lot of mistakes due to necessity to understand and re-write the code. Also many libraries/apis that data scientists/machine learning practitioners use are not available in jvm ecosystem.
Simply, refactoring (if necessary) and organising the code of the data scientists by following best practices of software development is less error prone and faster comparing to re-write in Scala.
Pipeline orchestration tools such as Luigi/Airflow is python native and fits well to this picture.
I have heard some arguments against Python such as, it is slow, or it is hard to maintain due to its dynamically typed language. However cost/benefit of time consumed porting python code to java/scala alone would be enough as a counter-argument. ML pipelines rarerly contains a lot of code (if that is not the case, such as complex domain and significant amount of code, then scala would be a better fit).
In terms of performance, I did not see any issues with Python. It is not the fastest runtime around but ML applications are rarely time-critical (majority of them is batch based).
I still prefer Scala for developing APIs and for applications where the domain contains complex logic.
We changed to Python instead of Java to have the back-end processing in the same language as our data analysis module. In addition, Python has a lot of libraries for data-processing. We intend to use Flask for our back-end web development. Flask is a simple, straight-forward framework for our purposes. Flask also has a large community which is beneficial to the development process.
1 code deploys for both: Android and iOS. There is a huge community behind React Native. And one of the best things is Expo. Expo uses React Native to make everything even more and more simple. Awesome technologies. Some other important thing is that while using React Native, you are reusing all JavaScript knowledge you have in your team. You can move easily a frontend dev to develop mobile applications.
A huge PRO of Expo, is that it includes a full building process. You run 1 line in the terminal, and 10 minutes after you have 2 builds done. Double check EAS Expo.
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.
Pros of Java
- Great libraries603
- Widely used446
- Excellent tooling401
- Huge amount of documentation available396
- Large pool of developers available334
- Open source208
- Excellent performance203
- Great development158
- Used for android150
- Vast array of 3rd party libraries148
- Compiled Language60
- Used for Web52
- Managed memory46
- High Performance46
- Native threads45
- Statically typed43
- Easy to read35
- Great Community33
- Reliable platform29
- Sturdy garbage collection24
- JVM compatibility24
- Cross Platform Enterprise Integration22
- Good amount of APIs20
- Universal platform20
- Great Support18
- Great ecosystem14
- Backward compatible11
- Lots of boilerplate11
- Everywhere10
- Excellent SDK - JDK9
- Cross-platform7
- It's Java7
- Static typing7
- Portability6
- Mature language thus stable systems6
- Better than Ruby6
- Long term language6
- Used for Android development5
- Clojure5
- Vast Collections Library5
- Best martial for design4
- Most developers favorite4
- Old tech4
- Testable3
- History3
- Javadoc3
- Stable platform, which many new languages depend on3
- Great Structure3
- Faster than python2
- Type Safe2
- Job0
Pros of Scala
- Static typing188
- Pattern-matching178
- Jvm175
- Scala is fun172
- Types138
- Concurrency95
- Actor library88
- Solve functional problems86
- Open source81
- Solve concurrency in a safer way80
- Functional44
- Fast24
- Generics23
- It makes me a better engineer18
- Syntactic sugar17
- Scalable13
- First-class functions10
- Type safety10
- Interactive REPL9
- Expressive8
- SBT7
- Case classes6
- Implicit parameters6
- Rapid and Safe Development using Functional Programming4
- JVM, OOP and Functional programming, and static typing4
- Object-oriented4
- Used by Twitter4
- Functional Proframming3
- Spark2
- Beautiful Code2
- Safety2
- Growing Community2
- DSL1
- Rich Static Types System and great Concurrency support1
- Naturally enforce high code quality1
- Akka Streams1
- Akka1
- Reactive Streams1
- Easy embedded DSLs1
- Mill build tool1
- Freedom to choose the right tools for a job0
Sign up to add or upvote prosMake informed product decisions
Cons of Java
- Verbosity33
- NullpointerException27
- Nightmare to Write17
- Overcomplexity is praised in community culture16
- Boiler plate code12
- Classpath hell prior to Java 98
- No REPL6
- No property4
- Code are too long3
- Non-intuitive generic implementation2
- There is not optional parameter2
- Floating-point errors2
- Java's too statically, stronglly, and strictly typed1
- Returning Wildcard Types1
- Terrbible compared to Python/Batch Perormence1
Cons of Scala
- Slow compilation time11
- Multiple ropes and styles to hang your self7
- Too few developers available6
- Complicated subtyping4
- My coworkers using scala are racist against other stuff2