Sunday, August 16, 2015

Best IDE in the World: IntelliJ IDEA

Man is a tool-using animal. Without tools he is nothing, with tools he is all.
Thomas Carlyle, Scottish philosopher, essayist, and historian.
Give me a lever, and a place to stand, and I will move the earth.
Archimedes of Syracuse, Greek mathematician, philosopher, scientist and engineer.
With pleasure, develop.
~ Jedi Master Yoda, commenting on the IntelliJ IDEA philosophy ;)

There's no doubt about it, we programmers swear by our tools; they give us the much-needed leverage to tackle and wrestle programming problems into submission. In particular, the programming tool that I have in mind is the Integrated Development Environment (IDE), which we programmers typically use predominantly use to craft solutions to programming problems. And as you'll probably agree, in many ways, large and small—as we master our IDE of choice—we get attuned to certain modes of thought in leveraging the IDE to slay wicked programming problems.

I'm reminded of a saying from Alan Perlis, the Yale computer scientist who happens to be the first recipient of the Turing Award—the equivalent of a Nobel prize in the universe that we programmers inhabit—when he observed that
A language that doesn't affect the way you think about programming, is not worth knowing.
I'm tempted to, and will go so far as to, paraphrase Perlis and say that
An IDE that doesn't affect the way you think about programming, is not worth knowing.
Trust me—especially so, after my having said earlier that we programmers swear by our tools—the perspective that I offer in this post will emphatically not be about glorifying some tools, while bashing other tools. Absolutely nothing of that sort!

My motivation here, simply, is twofold: (1) Share some insights into the ins and outs of the ground-breaking IDE that JetBrains' IntelliJ IDEA is, and (2) elaborate a bit on how it has made my daily programming life far more pleasant. The trusty Jedi Master Yoda—whose quote you saw atop this post, and whose enigmatically endearing picture you see right below —was definitely on to something profound when he uttered the memorable words, "With pleasure, develop" ;)

Ah, and here I'm glad to have remembered a point: I also hope that this discussion will serve to somewhat leaven the pattern of recent posts, several of which were decidedly theory-heavy, as I went about reflecting on the ins and outs of a score, and more, of books that have helped me grok, respectively, the landscape each of (1) the Scala programming language, (2) the Hadoop/Spark/Big Data landscape, and (3) the illustrious and rich Clojure/Lisp lineage.

From here onwards, to be frugal with words, I'll refer to the full-fledged name of the world's best IDE—which, of course, is JetBrains' IntelliJ IDEA—simply as IntelliJ, the latter actually being what we programmers commonly call it anyway ;)

With that, let's dive right into a rundown of what IntelliJ is especially good at, and I mean what it's spectacularly good at. But first, let's hear from a luminary of our programming world's firmament—here is legendary programmer-author, Robert “Uncle Bob” Martin, sharing his sentiments on IntelliJ, in his superb, not-to-be-missed book entitled The Clean Coder: A Code of Conduct for Professional Programmers (this being the sequel to his equally stellar book entitled Clean Code). Thus, in the section entitled "Tooling", in Appendix A of the former book, Uncle Bob notes that
I'm an IntelliJ user. I love it. I use it to write Java, Ruby, Clojure, Scala, JavaScript, and many others. This tool was written by programmers who understand what programmers need when writing code. Over the years, they have seldom disappointed me, and almost always please me. 
...code editing is no longer about lines and characters as much as it is about complex manipulations. Rather than thinking about the next few characters and lines you need to type, you think about the next few transformations you need to make. In short, the programming model is remarkably different and highly productive.
Amen. Precisely my sentiments that had informed an earlier remark, when I had noted—in paraphrasing Perlis, the Turing award-winning pioneer of programming languages—that "An IDE that doesn't affect the way you think about programming, is not worth knowing".

OK, let's also address up-front the best resources in book format, which attempt—in their own unique style, with their attendant strengths and weaknesses—to cover the vast capabilities of IntelliJ. This will tie in nicely with Java uber expert Joshua Bloch's answer to an interview question, which was posed to him by Peter Seibel, who had asked Bloch, "Do you believe you would really be more productive if you took a month to really learn IntelliJ inside out?"

But first, something on the best book resources that I had alluded to, earlier—these books are a welcome supplement to the excellent online documentation accompanying IntelliJ. They are, starting with the finest one leading this short list of IntelliJ books
  1. IntelliJ IDEA Essentials (Packt Publishing), by Jaroslaw Krochmalski—This book is geared toward the most recent version of IntelliJ. Plus it is reasonably substantial, and nicely distills the most important things you need to know about IntelliJ. I also appreciated the fact that it doesn't go on and on with the basics. It is geared toward those who want to become power users of IntelliJ.
  2. IntelliJ IDEA in Action (Manning), by Duane Fields—While this book excels at being substantial, it is, unfortunately, geared toward an old version of IntelliJ. It was published nine years ago, and covers version 5 of IntelliJ. Nonetheless, since the underlying concepts of IntelliJ remain unchanged, this book is a gold-mine of ideas to get you exploring the nooks and crannies of IntelliJ on your own.
  3. Getting Started with IntelliJ IDEA (Packt Publishing), by Hudson Orsine Assumpรงรฃo—Like the first book in this short list, this one is also geared toward the most recent version of IntelliJ. It is not substantial at all. But this will be an excellent book for someone who is completely new to IntelliJ. As its title suggests, it does cover the basics in detail, and does that quite well.
And as promised earlier, here is Joshua Bloch, answering a couple of interview questions regarding programming tools in general, and IntelliJ in particular—you can read the full interview with Bloch, as well as the interviews with a number of other programming luminaries, in the immensely enjoyable and replete-with-programming-insights book entitled Coders at Work: Reflections on the Craft of Programming (Apress), by Peter Seibel
Seibel: What are the tools you actually use to program? 
Bloch: I knew this was coming... The Emacs keystrokes are wired into my brain. And I tend to write smaller programs, libraries and so forth. So I do too much of my coding without modern tools. But I know that modern tools make you a lot more efficient. 
I do use IntelliJ for larger stuff, because the rest of my group uses it, but I'm not terribly proficient. It is impressive: I love the static analysis that these tools do for you. I had people from those tools—IntelliJ, Eclipse, NetBeans, and FindBugs—as chapter reviewers on Java Puzzlers, so many of the traps and pitfalls in that book are detected automatically by these tools. I think it's just great. 
Seibel: Do you believe you would really be more productive if you took a month to really learn IntelliJ inside out? 
Bloch: I do. Modern IDEs are great for large-scale refactoring. Something that Brian Goetz pointed out is that people write much cleaner code now because they do refactoring that they simply wouldn't have attempted before. They can pretty much count on these tools to propagate changes without changing the behavior of the code.
OK, by way of brief history, I'm a long-time, former Eclipse user, having used Eclipse for many years, all that while remaining sadly unaware of what IntelliJ has to offer. But when a former coworker at eBay introduced and turned me on to IntelliJ, it was love at first sight—I fell for IntelliJ, hook, line, and sinker, and have never since contemplated using any other IDE for my daily work ;)

Again, I totally respect and appreciate how different developers prefer different tools—one former coworker at Boston Scientific was a sort of monster of productivity, cranking out code using the venerable editor vi, which comes bundled with your standard UNIX distribution (As many of you may already know from your work in a UNIX environment, vi is about as bare bones an editor as you can imagine; I know just enough vi command to get around reasonably well for all my editing tasks at the UNIX command line). Anyhow, my former coworker's hands would fly across his keyboard in a blurred frenzy as he cranked out high-quality reams of code.

This is as good a segue as any to introduce the idea, which vi aficionado—and especially Emacs devotees, who are used to extending Emacs commands via the Lisp dialect called Elisp—will appreciate: Much as the amazing folks at JetBrains (makers of IntelliJ) note on this very topic of IntelliJ being  a keyboard-centric IDE
IntelliJ IDEA is a keyboard-centric IDE. Most of the actions (navigation, refactoring, debugging, etc.) can be carried out without using a mouse, which lets dramatically increase coding speed. If you had used another IDE for a while and have memorized your favorite keyboard shortcuts, you can use them all in IntelliJ IDEA. 
IntelliJ IDEA completely suits your shortcut habits by supporting customizable key-maps. A key-map is a set of keyboard and mouse shortcuts that invoke different actions - menu commands, editor operations, etc. IntelliJ IDEA comes with a set of pre-configured key-maps.
In glancing at the settings for key-map configurability for the IntelliJ that's installed on my Macbook Pro, I see

Without going into the specifics of what IntelliJ offers to programmers during their work with some specific languages and frameworks—that would take up way too much space—I'll point out some (languages and frameworks) that are a pleasure to work with from the vantage point of IntelliJ. You can look up the cool new features that were made available in the latest version of IntelliJ (which is version 14, at the time of this writing). Meanwhile, I'll point out some languages and frameworks that are a pleasure to work with in IntelliJ. They include the following, in no particular order

  • Java
  • Spring
  • Hadoop
  • Spark
  • Scala
  • Clojure—Sharing here a pointer to an excellent blog (by Tomek Lipski) that I had found and used a while ago, which nicely and concisely covers everything you need for running and debugging Clojure code with IntelliJ, including interacting with the REPL inside IntelliJ; yes, you can have your cake and eat it, too :)
  • Storm
  • Node-js

Adding in the end that the world of possibilities in the programming world—in my mind, anyway—rests squarely upon these three fertile engines of creativity
  1. Open source software
  2. The complementing paradigms of object-orientation and functional programming
  3. IntelliJ
Yes, IntelliJ richly deserves to be on this extremely selective, august list; and yes, that's how much IntelliJ means to me, thinking here to all the inspiration it has given me over the years!

The first two engines in the preceding list are the media, as it were, available to the creative programmer, while—and using the programmer-as-artist metaphor—the third engine is the easel on which the programmer paints his masterpieces. So the march of programmers relentlessly moves forward, to the cadence of these engines of creativity...

And in the march of the IDEs (sic), the IntelliJ IDE—which is right up there in importance with the Ides of March—has clearly emerged as the front-runner in the power tools that give us programmers the leverage we need to tackle and wrestle programming problems into submission. 

Regarding the photo below of a book-lined corner of my house... Stay tuned for next weekend's post, especially if the selection in the eclectic books in the small stack—the one lying flat, sandwiched between the Rubik's Cube and the Towers of Hanoi puzzle—intrigues you in any way. Reflecting the eclectic nature of the stacked books, each of which I lovingly cherry-picked from my book-lined house, next weekend's post will be equally eclectic and, for a change, decidedly non-technical. Just saying ;)

Wednesday, August 12, 2015

Top Thought Leaders to Follow

If you are immune to boredom, there is literally nothing you cannot accomplish ๐Ÿ˜ด
David Foster Wallace, in The Pale King 
Management is about arranging and telling. Leadership is about nurturing and enhancing ๐ŸŒฟ
Tom Peters, in Autocrat of the Breakfast Table
A leader is best when people barely know he exists, when his work is done, and his aim fulfilled, they will say: we did it ourselves ๐ŸŽˆ
Lao Tzu, philosopher and poet of ancient China 
Whatever you can do or dream you can, begin it. Boldness has genius, power and magic in it ๐Ÿ„
Johann Wolfgang von Goethe, German writer and statesman 
That flat Book-stack, the one atop my Book-rack, is by Folks in the Thought Leaders' pack ๐Ÿ†

The top thought leaders that I've selected—and what an eminent pack it is—are significant contributors who improve the human enterprise, each in their unique way. The sole criteria for their selection is the immense personal relevance and the value of the contributions they've made to improve, enhance, and better the human enterprise. I'm reminded of what the late American president John F Kennedy famously said in noting that "a rising tide lifts all boats".

My blog is—and will remain—decidedly oriented toward all things programming. But I had promised last weekend that this next weekend's post will be positively non-technical, for a change, to leaven the theory-heavy nature of my recent posts. Rest assured that I'll stay true to my core base of readers—I glanced at the stats and see that over 7,000 of you have graciously made the time to read my recent hard-core, technical musing on the finest books written, to date, on two amazing languages (Scala and Clojure) that run on the Java Virtual Machine (JVM).

Back now to this weekend's post :)

Much as the quotes atop this post suggest, the common themes that tie together the strands of the thought leaders' vignettes in this list are those of inspiration, leadership, guidance, dreaming boldly, and contributing meaningfully to the human enterprise. The remarkable and tongue-in-cheek, subtly phrased quote from David Foster Wallace—If you are immune to boredom, there is literally nothing you cannot accomplish—is of course straddling the osculating spheres of inspiration and boredom. More on that later...

The quote from Tom Peters—Management is about arranging and telling. Leadership is about nurturing and enhancing—is eminently clarifying, I thought, about what leadership is all about. And I would say much the same about the Lao Tzu quote—A leader is best when people barely know he exists, when his work is done, and his aim fulfilled, they will say: we did it ourselves—who has captured the selfless aspects of leadership exceedingly well, in my opinion.

Finally, who better than the genius Goethe—who had observed, Whatever you can do or dream you can, begin it. Boldness has genius, power and magic in it—to capture the visceral aspects which exemplify the essence of dreaming boldly.

With that, let's dive right into our vignettes of some top thought leaders. But first, a quick note; as I was putting together this list of vignettes, I came across this evocative phrase, which completed the line of thinking that forms the unifying theme of this post, uniting the individual strands into a coherent whole. To wit
A definition is the enclosing a wilderness of ideas within a wall of words.
 ~ Samuel Butler, as quoted in Marvin Minsky's The Emotion Machine: Commonsense Thinking, Artificial Intelligence, and the Future of the Human Mind (Simon and Schuster, 2007)
Exactly, I found myself thinking—regarding each of the individuals who grace this list—that it's precisely a "wall of words" that they have all used to create unique scaffoldings, so to say, to help others see farther, to dream bigger, and to lead better, each in their unique way; far from building walls to barricade others out, these thought leaders are eminently inclusive, each building, and then sharing, with the rest of us, their brilliant and down-to-earth conceptualizations.

It is inevitable, perhaps, that the inborn thirst for inspiration, which dwells in each and every one of us, seeks to be quenched. As Paul Simon's lyrics from the song Mrs. Robinson—anyone remember Dustin Hoffman in the movie The Graduate?—endearingly sparkle us with their witty effusion
Look around you, all you see are sympathetic eyes 
...Where have you gone, Joe DiMaggio  
A nation turns its lonely eyes to you
With that, I submit to you these thought leaders
  1. Cal Newport
  2. Elizabeth Grace Saunders
  3. Paul Graham
  4. Martin Fowler
  5. David Perkins
  6. Todd Henry
  7. Salman Khan
  8. Robert “Uncle Bob” Martin

1. Cal Newport

At the top of my list is Cal Newport, who is just about the most clear-eyed thinker I know of. Cal teaches at Georgetown University in Washington, D.C, where he is an Assistant Professor of Computer Science. What's unique about Cal are his uniquely original insights, which he shares with the world through his Study Hacks Blog—Decoding Patterns of Success. As the name of his blog signals, his posts seek to capture the essence of achieving meaningful success through wide-ranging, engagingly written, and eminently thought-provoking discussions. The reason I now mention his academic credentials—he earned his Ph.D. from MIT, and graduated from Dartmouth College—is that some of the most elegantly stellar thinking I've ever come across is regularly on display in his blogs.

I've written about his blog in posts elsewhere on my blog, and continue to follow his writings. I'll go as far as to say that each and every one of his books deserves to be read and re-read
Keep up the great work, Cal!

2.  Elizabeth Grace Saunders

This next thought leader has done for time management that nobody else has. If you think about just how important time-utilization truly is to us, in our busy lives, you'll find great value in Elizabeth's works. I've written about her work in posts elsewhere on my blog—see, for example, Time Management for Software Developers as well as Two Amazing Books—you can learn further about her work through those posts. Of course, there's no replacement for reading Elizabeth's work first-hand. And you can do exactly that by heading over to the following two books
If you're like most people, you've probably found yourself cringing at the mere mention of the phrase "time-management"; I confess that I used to. But her books, with their brilliantly humane take on time investment, have changed all that.

Keep sharing with your readers, Elizabeth, the brilliant insights into our most intangible, yet priceless, asset that time is!

3.  Paul Graham

Much as I've done for the first two thought leaders, I've similarly written about Paul Graham's work in posts elsewhere on my blog—you can look up, for example, On Paul Graham's Essays, and of Y Combinator and On Lisp and Paul Graham. He is, in order of relevance, a peerless essayist, Lisp hacker extraordinaire, and a venture capitalist (Y Combinator).

Some of the finest prose I've ever come across has been in the pages written by Paul. In an essay that I wrote earlier—and where I was referring to the two fine books Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig (Morgan Kaufmann, 1992) and On Lisp: Advanced Techniques for Common Lisp by Paul Graham (Prentice Hall, 1994)—I had noted that, "While both are replete with good advice, it is Paul Graham's On Lisp that also has the unique distinction of having been written spectacularly well; it has to be read to be believed!"

There is, of course, no substitute for reading his works first-hand. And you can do exactly that by looking up the following books by Paul
And as I alluded to above, his top-notch essays are positively not to be missed.

4.  Martin Fowler

The next entrant on my list, Martin Fowler, is—along with fellow luminary Robert “Uncle Bob” Martin—decidedly in the software industry camp. And that being the camp where I'm squarely positioned, I'm bending the rules a bit in including them, because their contributions to furthering the state-of-the-art in the programming world are simply too monumental to be denied ;)

It wouldn't be an exaggeration to say that Fowler's work has been instrumental in laying the very foundation of modern enterprise software. He is a profound thinker who has enlightened our industry through his prolific contributions. Fowler has captured and, in many ways, actually created a large corpus of the conceptual framework that makes up the bedrock of modern enterprise software. His excellent books include
And his equally excellent blogging continue to be a source of enlightenment. Those of us in the programming world look to many more years of enlightenment from this luminary.

5.  David Perkins

David Perkins is a founding member of Harvard Project Zero, a basic research project at the Harvard Graduate School of Education that investigates human symbolic capacities and their development. Probably the best way to introduce the inspirational value of his work is to draw parallels with a book that belongs to a different genre: Surely You’re Joking, Mr. Feynman! This book is the biography of the legendary Nobel laureate, as narrated by Richard Feynman himself, to Ralph Leighton. The LA Times was dead right when it commented on this book, saying, “Books like this are temptations to give up reading, and devote life to re-reading…”.

Precisely my sentiments, echoed—"Books like this are temptations to give up reading, and devote life to re-reading"—upon discovering Perkins' work several years ago. His major books include the following, each one worthy of reading and, to be sure, re-reading
To give you a flavor of his works, here is Perkins' inimitable take on the concept of "learning by wholes", which is the central theme of his book entitled Making Education Whole
So this is what learning by wholes is all about. Learning by wholes aims squarely at learning from the lively now. Its goal is to build learning out of endeavors experienced as immediately meaningful and worthwhile—junior versions of the whole game that build toward more sophisticated versions. Its commitment is to leverage features of good naturalistic learning, whether we are talking about Bierstadt, baseball, or Barcelona. Its method is to systematize important features of such learning through the seven principles. Its credo says that good learning is learning from a richly experienced today with tomorrow in view.
And here—in the same book—Perkins shares this intriguing insight by way of background, saying
My academic degrees are from the Massachusetts Institute of Technology. I was a mathematics major. After I finished the undergraduate work, I continued into a doctoral program, developing an interest in mathematical approaches to artificial intelligence. Artificial intelligence is the study of how to get computers to undertake intelligent activities, such as playing chess or proving mathematical theorems or controlling a robot to do interesting and challenging things. My work on artificial intelligence stimulated my interest in thinking and learning in human beings. After finishing my degree, I slid over into the world of cognitive psychology and education, but the why of that is another story. Right now, you can picture me in the foothills of the dissertation range, thinking about what kind of research on artificial intelligence to attempt.
If that piques your interest, you'll love his books—don't miss the sparkling works of this brilliant educator.

6.  Todd Henry

Todd Henry's writings on acquiring—grokking, as we would say in geek-speak—the creative process are utterly riveting and simply marvelous. Period. Here, in his own words, is what Todd does
I write books, speak internationally on productivity, creativity, leadership, and passion for work, and help people and teams generate brilliant ideas. 
In short, I'm an arms dealer for the creative revolution.
There's no wishy washiness in his writing, unlike the majority of books claiming to make you, um, more creative. Throw away those disheveled books, once and for all, and reach for the works of this stellar thought leader. To give you a flavor of Todd's work, check out what he says in his book entitled The Accidental Creative: How to Be Brilliant at a Moment's Notice
The always-on manner with which many creatives approach their work is arrhythmic, but the creative process is naturally rhythmic. There are peaks and troughs of productivity, an ebb and flow to idea generation. Working harder and staring more intently at the problem to achieve better ideas is like trying to control the weather by staring at the clouds. Rather, you need to incorporate practices that instill a sense of structure, rhythm, and purpose into your life. You need to create space for your creative process to thrive rather than expect it to operate in the cracks of your frenetic schedule. This will not only help you generate better ideas now, but it will also ensure that you are acting on the things that matter most instead of drifting through your days.
I highly recommend these books by Todd
There are even a few equations—irresistible, of course, to us programming geeks—thrown in the pages of The Accidental Creative, for example this one that overflows with sagacity
Prolific + Brilliant + Healthy = producing great work consistently and in a sustainable way
You won't regret buying any book written by Todd. Guaranteed. I look forward to many more works by him...

7.  Salman Khan

Salman "Sal" Khan is of course the consummate Magellan of the digital world—right up there with the inimitable David Perkins—who has charted the smoothest path so far to galvanizing empowered learners all over the world. I salute the work of this thought leader; the engines of ingenuity are definitely blazing away at Khan Academy, the non-profit educational organization he created in 2006.

What's unique about Sal is the peerless originality with which he has imbued the world of education, utterly revolutionizing it in the process. And you can read all about it in this fantastic book in which Sal himself captures the essence of his radical vision for the future of education, as well as his own remarkable story
His pioneering video tutorials have brought the spark of learning to light up the lives of millions. In the words of Chris Anderson, the TED Curator
The world dreams of education reform, and Sal Khan is delivering. His pioneering video lessons have brought the thrill of learning to millions. In this compelling book, he tells the remarkable story of Khan Academy, and explains the potential in students learning at their own pace and achieving true subject mastery.
There are no less than 6,500 video lessons available at the Khan Academy website, teaching a wide spectrum of academic subjects. This thought leaders has definitely focused on the most vital of goals, that of educating the world.

Legendary programmer-author, Robert “Uncle Bob” Martin has made, and continues to make, unique contributions to the world of software engineering. He is right up there with Martin Fowler in terms of the significant work that he has done in making the programming world a more pleasant one to inhabit.

Let me list out his superb books—each one in the not-to-be-missed category—with which Uncle Bob has enlightened the programming world
Allow me to elaborate on my preceding remark about his significant contributions to making the programming world a more pleasant one to inhabit. And this is perhaps best understood by reading his Manifesto for Software Craftsmanship, which starts out with these bold words
As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:
  • Not only working software, but also well-crafted software.
  • Not only responding to change, but also steadily adding value. 
  • Not only individuals and interactions, but also a community of professionals
You can read the full manifesto at Manifesto for Software Craftsmanship :)

I'm looking forward to continued enlightenment—hint, Uncle Bob, please continue to write—by this prolific luminary of the programming firmament!

And that brings us to the end of these vignettes. Again, the sole criteria for the selection of these top thought leaders is the immense personal relevance, and the value of the contributions they've made to improve, enhance, and better the human enterprise. It is in the works of these leaders that I've found inspiration and guidance.

Do feel free to post your comments, once you've finished reading this, so we can build a conversation around what you, uniquely, look for in a thought leader. Meanwhile, I leave you with the blazing warmth of these glowing words of poetry...
Education is not the filling of a pail, but the lighting of a fire.
~ William Butler Yeats