Larry Wall, the father of Perl, wrote in Programming Perl that the three virtues of a programmer are laziness, impatience, and arrogance.

Laziness is the first element of a programmer’s virtue. Laziness, as Larry Wall calls it, is not about being content with the status quo and not trying to improve, but about devoting the least amount of time or energy to achieving the same or better goal. “Lazy” programmers try to make their code useful and readable, which saves a lot of maintenance costs later; I also try my best to improve the comments and documentation in the code to avoid being asked too many questions. I am better at using various tools to improve my efficiency in all aspects.

For developers, especially Java developers, the use of development tools to write code really can greatly improve work efficiency, because now many IDE has a very powerful tool, not only provides code completion, errors, automatic compilation, and other functions, also provides all kinds of plug-in, convenience and other tools, can greatly improve the efficiency of writing code and code quality.

There are currently two main Java code development tools on the market: Eclipse and IntelliJIDEA. These two development tools have a long history of rivalry, but in recent years IntelliJIDEA has gradually shaken Eclipse as the developer of choice. At Google I/O in 2013, Google introduced its new Android integration IDE, “AndroidStudio,” and the biggest change was the switch from Eclipse to IntelliJ IDEA.

I also experienced the transition from Eclipes to IntelliJ IDEA. IntelliJ IDEA is actually better than Eclipse in some respects, and with the keyboard shortcuts on Mac OS, it can really improve development efficiency.

Jet Brains did a survey of developers using ides and found that 59% of developers use IntelliJ, 30% use Eclipse and less than 5% use plain text editors like Sublime and Vim.

It is inevitable for programmers to use version control tools to manage the code in collaborative development. Version control tools are mainly used to store and track the modification history of managed files, and they are essential tools for software developers.

At present, the mature version control tools in the market include CVS, Visual SourceSafe, PVCS, Subversion (SVN) and Git, etc. SVN and Git are widely used.

Both SVN and Git provide excellent version control functions, such as unified code management, conflict resolution, code permission control, branch development and merge, etc. Developers should be familiar with SVN and Git, such as code pull, code commit, code merge and conflict resolution, especially Shell commands, which can save a lot of time.

While there is a lot of open source code and a lot of corporate code that tends to use Git for code hosting, we can’t guarantee that all the code we encounter uses Git. The larger the company, the more likely it is to use SVN for code hosting, as migration costs.

An automated build is a set of processes that automatically create software components, including compiling computer source code into binaries, packaging binaries into software packages, and testing them automatically. Early automated builds were done by creating Make, later developed into GNU Make. Over time, as software development today is mostly done with better automated build tools, such as Ant, Maven, and Gradle, the three biggest build tools in the Java world, Ant is almost out of the picture.

Maven and Gradle have won the hearts of many programmers because of their excellence in dependency management, conflict resolution, project building, project structure management, and plug-in mechanisms.

As the saying goes, a picture is worth a thousand words. The pattern is a very good form, whether it is sorting out ideas by yourself or explaining them to others. And, programmers often have to do some PPT and so on, with these drawing tools, can show their skills.

1) Mind mapping — XMind

The most natural way for the human brain to think is radioactive, or what we call divergent thinking. When we usually think about a problem, we take a thinking point as the starting point, and then continue to spread out. If we graphically express this thought process, it’s a mind map. Mind mapping can effectively express the thinking pattern, which is conducive to the expansion of human brain’s diffusion thinking. This is a mind map of “productivity software”.

XMind is a very practical business thinking mapping software, developed by Java language, with the nature of cross-platform operation, and based on the EclipseRCP architecture, support plug-in by writing XML list file to expand the system defined extension points, to help users improve production efficiency in a real sense. Lifehacker has named it the “Best Brainstorming and Mind Mapping Tool” and the “Most Popular Mind Mapping software”.

XMind’s application body consists of a set of plug-ins, including a core main application plug-in, an Eclipse runtime plug-in, a help document plug-in, and a multilingual resource file plug-in, which are Eclipse user friendly.

XMind can draw not only mind maps, but also Fishbone, two-dimensional, Tree, logical, and organizational charts (Org, Tree, LogicChart, Fishbone), and easily switch between these presentation forms. Users can import MindManager and FreeMind data files, flexibly customize node appearance, insert ICONS, rich styles and themes. The output formats are HTML and images.

2) UML drawing tool

UML (Unified Model Language), also known as standard Modeling Language, is used for visual modeling of software-intensive systems. When doing detailed design, developers have to deal with UML diagrams, such as use-case diagrams, class diagrams, object diagrams, sequence diagrams, activity diagrams, and state diagrams.

In simple terms, developers need to understand requirements before writing code, and then model the software system, transforming abstract language descriptions into visual models. In the modeling process, a standard language is needed, and that language is UML.

There are many UML drawing tools available on the market, all of which meet basic drawing functions. Here are a few.

  • Rational Rose is an object-oriented unified Modeling Language (UML) visual modeling tool from Rational for visual modeling.
  • Visual Paradigm for UML (VP-UML) is a powerful, cross-platform, easy-to-use, intuitive UML modeling and CASE tool that can be integrated into other CASE tools and other IDE tools. Visual Paradigm for UML supports UML modeling, database modeling, object relational mapping, reverse engineering and Java bidirectional engineering, etc.
  • StarUML (SU) is an open source UML development tool that supports drawing nine UML diagrams, such as use case diagrams, class diagrams, sequence diagrams, and state diagrams. It has the advantages of fast development, flexibility, and strong scalability. The only disadvantage is that it can only generate class diagrams during reverse engineering, but cannot generate relationships between classes.

Markdown is a lightweight markup language created by John Gruber that allows people to write documents in plain text format that is easy to read and write, and then convert that text format into valid XHTML (or HTML) documents.

As programmers, we need not only hard programming skills, but also software for writing, and the preferred way to write is Markdown. In a nod to programmers, many major blogging sites now support Markdown for writing articles. GitHub also supports Markdown syntax for editing README files.

As for Markdown editors, there are many options on the market, including Mou, MacDown, Typed and Bear, etc. There are also many online Markdown editors, which will be described in detail in the online Tools section later.

It should also be mentioned that it doesn’t really matter which Markdown editor you use, but rather that the programmer should be able to use the usual Markdown syntax. The resulting article or document can be viewed on any platform that supports MD syntax.


I’ve covered common ides for Java development, but in some cases you just need to open a single text file, such as an XML file, a JSON file, and so on, a handy text editor comes in handy.

SublimeText is a popular code editor that runs on Linux, Windows, and Mac OS X operating systems and is a popular text editor for many programmers. It has code highlighting, syntax hints, auto-complete and responsive editor software, a gorgeous interface, and a plug-in extension mechanism.

Atom is GitHub’s cross-platform text editor for programmers. It is popular among programmers because of its simple and intuitive graphical interface. It also has many interesting features: CSS, HTML, JavaScript and other web programming languages; Support macro, automatic split screen function, integrated file manager; It supports Mac OS, Windows and Linux operating systems, plug-ins written by Node.js, and built-in Git version control system provided by GitHub. Most extensions are open source licensed, built and maintained by the community.

Notepad++ is also a set of plain text editor chosen by many programmers. It is developed based on the Scintilla text editing component, which is also open source. The whole project was originally hosted at SourceForge.net and has twice won the SourceForge community choice award as the best development tool. Notepad++ was hosted on TuxFamily in June 2010 and is now hosted on GitHub.

In addition to some of the essential software described above, there are some common tools that programmers need in their daily work, such as Host binding, HTTP debugging, etc.

1) Host binding

The Host binding is certainly familiar to us in our daily development work, as we deal with it almost every day. We can often switch back and forth between different Host bindings, especially in Java Web development, where one set of Host bindings may be used for local development tests and another set of Host bindings may be used when the test environment is deployed and submitted to testers for testing. After testing, a new set of Host bindings is required to undergo pre-publishing, grayscale publishing, and so on. Using a useful Host binding tool can greatly reduce the time of Host binding switching.

The SwitchHosts is a very convenient and quick Host binding switching tool. It is free and open source and supports functions such as pre-sending highlighting, multiple solution selection, quick switching between notes by clicking the line number, shortcut switching between system menu bars, and scheme import and export.

2) HTTP debugging

In everyday Web development, we’re dealing not only with Host bindings, but also with RESTful apis, and sometimes we need a tool to send HTTP requests, or mock HTTP requests, like POST requests, This is where you need a tool that simulates sending HTTP requests.

Postman is a Google Chrome plugin designed to debug and send HTTP requests to web pages, and to run test cases. In addition to plug-ins, software downloads are also available. It can simulate all kinds of HTTP requests, from the usual GET and POST to RESTful PUT and DELETE, and even send files and additional headers. Postman can automatically beautify Response content by organizing JSON, XML, or HTML into a format we can read. Postman also supports writing test scripts that can quickly check Request results and return test results. All in all, Postman is a great application for HTTP debugging.

Article source: Android Bus official website blog source selection:

Write a super smooth production-level APP in Kotlin