Michael Safyan


Java Resources



Advanced Features



Standard Library





  • JUnit for writing Java unit tests
  • Mockito for easily generating mocks, modifying their output, and verifying their invocations
  • Hamcrest for general purpose matchers used to easily express test assertions
  • Roboelectric for writing Android tests that run on an Android device or emulator


  • Protocol Buffers for automatic, cross-language, cross-platform serialization with good backwards compatibility
  • java.io.Serializable for builtin, automatic serialization of Java objects (hard to maintain compatibility)
  • java.io.Externalizable for builtin, manual serialization of Java objects (more manual labor involved)



  • JFlex for auto-generating a lexer from a lexical specification to break up input into tokens
  • Java CUP for generating a parser to build up and process an abstract syntax tree from lexed tokens


Numerical Processing

User Interface

  • Thymeleaf a templating engine for emitting HTML (e.g. when implementing a server with a web-based UI)
  • GWT for building UIs in Java and generating HTML/CSS/JavaScript from it
  • Android XML and android.view.View for developing Android UIs
  • Swing for building desktop GUIs (though consider creating a webapp, instead)


Build Systems

  • Bazel (my recommendation) for Google's general-purpose, open source build system
  • Gradle for a general purpose, declarative build system with plugin support for Java
  • Apache Maven for a declarative XML-based system (recommend against; popular, but slow and complex)
  • Apache Ant for an imperative XMl-based system (recommend against; just a more verbose, confusing Make)
  • GNU Make for a low-level, imperative build system (ok for small projects, otherwise avoid)

Integrated Development Environments

  • Cloud 9 for an online IDE (what I'm using for this website, in fact)
  • Code Envy for yet another web-based IDE
  • Code Anywhere for yet another web-based IDE option
  • Nitrious.io for yet another web-based IDE option
  • Android Studio if developing for Android; has good support for Android UIs and based on IntelliJ IDEA
  • IntelliJ IDEA for a Java-specific, desktop-based IDE with strong refactoring / code understanding capabilities
  • Eclipse for a popular, general purpose, desktop-based IDE with good builtin support for Java
  • NetBeans for a free IDE with good drag-and-drop user interface creation for Java Swing GUIs


  • IDEOne an online compiler for quickly testing / validating small snipppets
  • FindBugs for automated defect detection
  • Checker Framework for static analsis and verification of nullness/non-nullness
  • Javadoc for automatically extracting/generating documentation
  • JDB for debugging Java programs
  • SWIG for auto-generating JNI code to allow C++ and Java code to talk to each other
  • Jenkins for continous integration and testing

My statements are my own and do not necessarily reflect the opinions of Google Inc.