Tuesday, July 7, 2020

Top tools for full stack java developers

Full stack java developers wears the hat of both front end developers and back end developers. They just write the server/client code from start to end with css/html/js/java/sql/etc.

Let's take a peek into a typical full stack java developer's magic sack. It is just a peek, because a professional java developer's technical vocabulary requires a dictionary length file to enumerate.

Runtime

  • JDK -- When choosing java development kit (JDK), there are basically 2 options. Commercial version or free version. Oracle JDK LTS(Long Term Support) released every 3 years, which requires a commercial license. The latest oracle JDK 11 is not free. You got what you pay, oracle keep updating the JDK for bug fixes and security patches. Oracle OpenJDK is released every 6 months, it is free and open-source implementation of the java platform standard edition and it's been the official reference implementation of JAVA SE since version 7. For bug fixes and security patches we should upgrade oracle openJDK every 6 months. Besides oracle, other vendors such as Azul system also provides java SE 11 implementations. Their zulu 11 JVM, for example is java 11 openjdk builds. Their Zing JVM is Java Virtual Machine (JVM) and runtime platform for Java applications. Zing is compliant with the associated Java SE version standards. Zing's typical use cases are applications with requirements regarding low latency response time or huge heap sizes up to 20 TB by using its own pauseless garbage collection implementation (C4) and its own Just in time compiler implementation (Falcon). While Zulu is a general usage JVM which covers more general use cases as it is mainly openJDK with its Garbage collectors like CMS GC, G! GC, Parallel GC and the Hotspot JIT. Zulu is a branded version of OpenJDK (free to download and use without restrictions) with paid commercial support, while zing JVM charges per host.
  • NodeJS -- NodeJS JavaScript is an open source javascript runtime built on Chrome's V8 JavaScript engine. As Node. js is not the traditional programming language, but rather a runtime environment, it is easy to learn for both front and back-end developers. Node JS development has become a mature JS language and can be credited with having a large ecosystem. It has not just revolutionized backend development but also contributed in a big way to bringing performance to the front end.

IDE

  • Eclipse/IntelliJ IDEA with maven -- the most popular Java IDE are eclipse and Intellij IDEA. While eclipse is an open source free IDE, IntelliJ IDEA provides both free community version and charged ultimate version. All modern java developers use maven to manage java dependencies. 
  • Visual Studio Code with npm-- Visual Studio code is Microsoft open source IDE geared towards nodeJS development. It is the clear winner for full stack web developers. Atom used to be the top one IDE few years ago, now it is replaced by visual studio code. Visual Studio Code and Atom has similar features, but the fashion favors Visual Studio Code this year. Another popular IDE is WebStorm, a subset of IntelliJ IDEA, geared towards front end development. JetBrain's IDE provides unlicensed copy or licensed copy. It has tons of features and you get what you paid for, convenience and security. Other front end IDEs are text editors in their full glory. sublime text, for example, is the code editor used in coderpad, which has many short cuts to create code fast. It has tons of plugins you can find through Package Control, good for free-style editing of different languages. The npm to NodeJS is like maven to Java. When you download Node.js, you automatically get npm installed on your computer. The npm (Node Package Manager) is a command-line tool for interacting with online repository for open-source Node.js projects. 

Server

  • Apache -- Apache http webserver (httpd) is a free and open source program web server that runs 67% of all webservers in the world. Written in C language, it is fast, reliable, and secure. It is also adaptive to different environments using extensions and modules. For example, with mod_proxy, it can be configured to a multi-protocol proxy/gateway serve. A typical use case is to proxy requests to tomcat or nodejs, which need to be accessed from internet but don't have public IP. For another example, with mod_proxy_balancer, it can provide load balancing for all the supported protocols.
  • Tomcat -- Born out of the Apache Jakarta Project, Tomcat is an opensource application server written with java and designed to execute Java servlets and render web pages that use Java Server page coding. Tomcat can be configured in eclipse, intellij etc. to run the java servlets based code local during your development. It is also the embedded web server of springboot as one of the maven dependencies. While Tomcat is a java-phallic web server, apache http server is a general-purpose http server, which supports a number of advanced options that Tomcat doesn't. 
  • Jetty -- Tomcat is the most popular java servlet container/server, arguably the second popular servlet container/server is eclipse-foundation developed jetty. Due to its compactness and small footprint, Jetty is a great fit for constrained environments and for embedding in other products. 
  • GlassFish -- Ironically, tomcat and jetty were supposed to be java EE application servers. Though market selected them, neither Tomcat nor Jetty is technically a fully featured Java EE container. They lack support for many Java EE features and can not have the title of "java EE application servers". Oracle recommended 3 Java EE 8 Full Platform Compatible Implementations -- GlassFish, IBM WebSphere Application Server, wildfly. Tomcat and jetty are not in the list. GlassFish gets contributions from the same people who define Java EE standards. (Oracle has transferred Java EE to the Eclipse Foundation, and it is now called Jakarta EE after Java EE 8.) It’s the reference implementation Java EE application server that always support the latest Java EE features. 

Persistant Layer

  • MySql -- mysql is the most popular relational sql database. Its popularity is related to its adaptive to the major cloud providers. MySQL is free and open-source software under the terms of the GNU General Public License, and is also available under a variety of proprietary licenses. There are other relational sql database options such as mariadb, postgreSQL, oracle database. Relational database is a group of databases that stores structured information. The data written to the database has to match certain schema. In recent years, a new type of database, so called noSQL database began to gain popularity. The data written to the noSQL database can be free style, no schema restriction has to be put on the data. NoSQL databases come in a variety of types based on their data model. The main types are document, key-value, wide-column, and graph.
  • MongoDB -- MongoDB is the most popular noSQL database. MongoDB uses JSON-like documents with optional schemas. It is developed by MongoDB Inc. and licensed under the Server Side Public License. MongoDB stays at the CP edge of CAP graph. It is consistent, partition-tolerant, but not always available. Compare to relational databases, which lacks of partition-tolerant, MongoDB can be horizontally scale up without worrying about network partition. Data warehouses, data lakes store huge amount of structured and un-structured data, the storage have to be distributed among many VMs in different networks. Some servers unable to communicate to another servers across networks are unavoidable, therefore databases for the bigdata has to be partition-tolerant. That is key reason MongoDB are naturally selected by cloud.

Framework and Library

  • spring framework -- Spring is a powerful, lightweight framework used for application development using Java as a programming language. The Spring framework comprises of many modules such as core, beans, context, expression language, AOP, Aspects, Instrumentation, JDBC, ORM, OXM, JMS, Transaction, Web, Servlet, Struts etc. The root of spring framework is the IoC (Inversion of control) container. It receives metadata from either an XML file, Java annotations, or Java code. The container gets its instructions on what objects to instantiate, configure, and assemble from simple Plain Old Java Objects (POJO) by reading the configuration metadata provided.
  • Grails -- spring framework's closest competitor is grails framework, a powerful Groovy-based web application framework for the JVM. Both Grails and Spring Boot are "Full Stack Frameworks". "Groovy" is the primary reason why developers consider Grails over the simple and elegant Spring Boot. Groovy can be used as a scripting language for the Java platform. It is almost like a super version of Java which offers Java's enterprise capabilities. Groovy's use for scripting in the Jenkins CI/CD platform should help the JVM language maintain its popularity. However, as a programming language for JVM, I’d go with Kotlin or Scala for JVM.
  • Angular.js -- AngularJS is an open-source Front-end JavaScript framework. Its goal is to augment browser-based applications with Model–View–Controller (MVC) capability and reduce the amount of JavaScript needed to make web applications functional. Angular.js is currently the most popular Front-End javascript framework, the majority of the new front end stack is built on angularJS.
  • ReactJS -- The second popular Front-End javascript framework is ReactJS from facebook, ReactJS native is widely used for building cross-platform mobile apps.

Text Editor

  • sublime text -- popular text editor used by most front front end developers, it provides unlicensed and licensed versions. 
  • TextMate -- open source text editor which is handy when formatting language and markups such as xml, json, html.

Build and Deploy tool

  • Jenkins -- Jenkins is a free and open source automation server written in Java. It is used to continuously build and test software projects, enabling developers to set up a CI/CD environment. It use version control tools SVN, Git etc. to check out the code, it then run various maven commands such as mvn release:perform to build/test/release the artifacts to the repository. 
  • TeamCity -- an alternative CI/CD tool for Jenkins is TeamCity from JetBrains, the same company developing Intellij IDEA. It is commercial software and licensed under a proprietary license. Again, you get what you paid for.
  • Ansible -- free and open source automated deploy tool. With roles and playbooks, ansible allows the authorized user to execute tasks such as package deploy, OS update, server restart etc using remote SSH. A typical use case is login a set of servers and run red-hat native command yum to install rpms on redhat linux release, or use ansible-realm command package to detect the OS, then install the package accordingly. So far it is the most popular configuration management tool because it's easy to use. 
  • Grunt or Gulp -- Both Grunt and Gulp are Automated Task Runner on Node.js. Major Difference Between Gulp and Grunt Lies in How They Deal With Automation of Tasks Internally . Gulp uses node streams in memory for running different tasks and Grunt use intermediary files which are disk I/O operations for the same work. Memory vs. I/O operations, Gulp is clearly faster than Grunt. Gulp is a good choice if you prefer code over configuration, Gulp's stream style fluent api is cleaner than Gulp's configuration like api. Both tools are typically used to build, concat and minify javascript code for deployment.
  • Hubot -- open source tool written in CoffeeScript on Node.js, with out-of-box scripts and your own scripts, hubot can be customized to automate the code deployment with a simple slack command, email message, google home command etc.

VM Manager

  • Vagrant -- Vagrant is a free and open source tool for building and managing virtual machine environments in a single workflow. With Vagrant, developers can make local development environment as close to production environment as possible. 
  • Docker -- Where Docker relies on the host operating system, Vagrant includes the operating system within itself as part of the package. One big difference between Docker and Vagrant is that Docker containers run on Linux, but Vagrant files can contain any operating system.

Process Manager

  • PM2 -- PM2 is a production process manager for Node. js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks. Starting an application in production mode is as easy as: $ pm2 start app.js.

Communication

  • G suite  -- with google drive, gmail, google calendar, etc. you keep in touch with your team mates.
  • jira -- project management
  • confluence -- share knowledge
  • bitbucket/github/gitflow/svn -- share versioned code
  • slack -- chat tool
  • zoom -- online conference tool
  • citrix -- Citrix is an application that allows you to securely connect to a virtual desktop, server, application, or roaming profile through a terminal (or other computer).
  • Big IP edge client -- vpn connection.  
  • nomachine -- free, cross-platform, serverless remot e desktop tool that lets you setup a remote desktop server on your computer using the NX video protocol.  
  • cisco phone -- phone

No comments:

Post a Comment

Why I stopped publishing blog posts as information provider

Now the AI can generate content. Does that mean the web publishing industry reaches the end? ChatGPT said: ChatGPT Not at all. While AI can ...