OpenSource = options and options - Part 1

Part 1 of my what I like in opensource and opensouce technologies I work with.

As being a technophile, Opensource is like oxygen in tech field for me. Opensource plays a major role for being a technophile I am today and without opensource I may not be what I am. Thanks to gaints for releasing there tools and softwares as opensource.

open-source (noun) denoting software for which the original source code is made freely available and may be redistributed and modified.

If you know a programming a little and worked with any language then I can gurantee you that might have encountered this term opensource or worked with one the opensource technology. Let me give some examples:

  • if you are a java developer and want to develop websites using java then you must have heard about Spring Framework
  • if you want to develop webpages then frameworks like Angular, React or Vue
  • if you are in data science field then you must have heard about deep learning frameworks like Tensorflow, Keras, PyTorch etc.

I like opensource because it gives me options to choose, to work with technology I am most comfortable with and choose what’s right for my project. For example - if I want to build frontend of a website then I have multiple options to choose from like Angular (for huge application), React (when I need to build something fast), Vue (when I need features both of Angular and React) leaving out the options new emerging technology - web components which includes options like Polymer, Stencil etc.

Main reason of loving opensource is that my daily driver operating system is opensource and most of the tools I use, for Operating System I use Ubuntu with KDE, Code editor is Visual Studio Code, IDE for JVM based languages is IntelliJ IDEA, for build automation I use Jenkins, Docker for deployment etc.

Let’s see some of them I know and worked with. I discuss them in details in my future posts.

Brief about some options

Web Development - Backend

When developing backend of a website I have a multiple options and different languages like Java, Node.js, Python, Ruby, Golang, Haskell, Elixir are just name of few. I choose depending on time I have to complete the project, is it a serious project or a toy project which I can port after wards.

In Java I choose to work with Spring as being one the oldest and most robust framework but Spring is huge and I have other options like Vert.X, Ktor for using it with Kotlin, Grails with Groovy.

In Node.js, I choose mainly choose Express or Koa and if I need fullstack frameworks I choose to go with Sails.js or Meteor.

For Python and Ruby I choose Django or Flask and Rails or Sinatra respectively.

For Elixir, I go with Phoenix and Golang I go with Revel or Beego.

Haskell being a new language for me has a lot of options like Happstack, Spock, Snap, Servant, Scotty, Yesod.

I choose language and frameworks based on how fast development needs to done, how many features I need, I how big it is and for how many days I have to maintain it.

Web Development - Frontend

Used to work with a library you all might have heard about or worked with - jQuery but with introduction to Node.js use to jQuery is just absolute with new projects and projects using jQuery now is due to maintainance reasons as far as I know as jQuery is a huge library.

Now I have 3 main options when developing frontends -

  • Angular - when I have to develope a large application and I need type safety of typescript.
  • React - when I need something fast and ready to use third-party libraries.
  • Vue - when I need features of both Angular and React.

I also have option to build webapps with web components with libraries and frameworks like Polymer, Stencil, Aurelia, Bosonic etc. Best part of using web components is that any component created with any library will work with other. More on this in future posts.

So covered some frontend and backend technologies I love to work with. In futhure parts I will cover mobile apps, desktop apps, machine learning, devops etc. Stay tuned.