
Program above and beyond your actual ability by using FreeMind - Alex3917
http://alexkrupp.typepad.com/sensemaking/2012/09/program-above-and-beyond-your-actual-ability-by-using-freemind.html
======
hesitz
Nice, great way to organize information.

I would add that Orgmode in Emacs is used by many in nearly the same way.
Freemind and mindmappers in general are basically just visual outliners. For
me, you get enough of the visual aspect with Orgmode (and OP's example doesn't
even really use special visual aspects of a mindmapper) and the kicker is that
Orgmode has features that make it more useful than Freemind. Two that come to
mind are (1) orgmode search/agenda functionality allow searches that isolate a
specific set of nodes in the agenda -- with each agenda node potentially from
different part of document, or even spread among multiple files, and (2) in
Emacs you're doing all of the editing in a first class editor.

Orgmode does have import and export capability for Freemind, check out the
commands beginning 'org-freemind-'. To convert OP's python.mm file to org you
can open it in Emacs and then run command <alt-x>org-freemind-to-orgmode .

~~~
thanthese
For those not willing to take the orgmode plunge, <http://workflowy.com> is a
great alternative.

~~~
andrewflnr
In case anyone else was frustrated by the content-free front page, here's a
pretty good, if biased, treatment of Workflowy:
[http://www.slate.com/articles/technology/technology/2012/08/...](http://www.slate.com/articles/technology/technology/2012/08/workflowy_the_note_taking_app_that_changed_the_way_i_organize_my_life_.html)

------
alecdibble
I use mind maps for mapping out venture ideas because once you are finished,
it is very easy to visualize what areas of the idea still need to be
planned/hashed out.

However, I never thought about using it for programming. I would like to
complement you on that idea. After reading your article, I completely
understand how powerful of a tool this can be.

One of the biggest reasons I haven't completely jumped on mindmaps is because
I used Evernote extensively for organization. However, it does not do as well
for this kind of application, especially where visualization is important. I
currently sort all sites, services, and articles in a tag tree in Evernote. To
integrate it with this system, I will probably add note links to the maps
under the relevant nodes.

------
robomartin
Interesting. I've had FreeMind installed on one of my systems for probably a
year and never really got around to using it.

With regards to using it to improve programming performance, I think you say
near the end of the article that this will not make someone a star overnight.
And I agree. In fact, I'll say that this will not make you a 10x programmer,
period. Not without the algorithmic foundation and experience that a 10x
programmer (whatever that is) has to have.

I am not criticizing your article at all. I think you could be onto something
here. I just want to point out that there's far more that goes into being a
good programmer than being able to navigate documentation quickly. I think you
allude to that in your article when you talk about the mind map exposing you
to peripheral entries every time you use it.

I suppose a map could be used to log and accumulate knowledge on other areas
equally important to programming. Algorithms and patterns is what comes to
mind.

There was a recent HN discussion on data representation as an important
element of writing good programs. I find this is a critical difference between
a good (and experienced) programmer and a newbie or intermediate programmer.
The experienced programmer is at a point where he/she almost intuitively
understands which representations might offer an advantage. This sort of thing
only comes with experience --writing a lot of code and learning from your
mistakes. I'd be interested in your thoughts in how you might approach
encoding such knowledge into a mind map.

I watch a lot of documentaries and presentations. Sometimes I wish I could
capture the important points in some fashion in order to develop a database of
knowledge, if you will, for future reference. In the past I've tried doing a
text file for each documentary. You could keep them all nicely sorted and
search the files for keywords. It really hasn't worked that well. I wonder if
mind maps is what I've been looking for?

Finally, I wonder if mind maps is the best way to document and manage ideas? I
can see that one might be able to find relationships and synergies by
exploring a map. This is a case where I have consistently used text files to
log ideas and related links, text, etc. I now have hundreds of these files.
It's at the point where the directories that contain them are impossible to
view and get a sense of what is there. This meaning that you can't see 300+
file names and easily understand and/or explore the concepts within them and
relating them. Do you (or anyone reading this, of course) have any experience
managing such information using mind maps?

~~~
fsavard
About managing ideas and hundreds of text files: I've been doing something
similar with a personal wiki (with WikidPad) for a few years. Prior to that I
used text files but, like you mention, it was unmanageable.

My wiki has about 1,500 pages (a few MBs of text) and it's still very
manageable. I use it for just about all notetaking purposes (you mention
taking note about documentaries, it's one use case of mine; but the biggest is
by far replacing bookmarks with free form text -- see link below).

The biggest advantage I see over text files is the graph structure you create
by linking entries. I'll have a bunch of links at the top of each entry, and
I'll add links whenever I feel it'll help me next time I try to find some
piece of information.

About managing programming-related info: I have a bunch of code snippets in
there too, along with more reference-like notes on concepts.

I've thought about using mind maps in the past, but I find it too limiting
(I'd have to have a mind map + text notes in another system, and anyway I
prefer something more text-y). But of course it's way better for visualization
of the overall structure.

It's been a while, but a few years back I blogged about all this personal
wikis idea (and wrote a post or two on using them for programming-related
stuff), so if it may be useful: <http://www.fsavard.com/flow/tag/wiki/>

~~~
robomartin
Didn't know about WikidPad. I downloaded it and will be playing with it. Of
course, MediaWiki and XAMPP (or a server) is an interesting possibility for
other reasons.

I also came across this: <http://tiddlywiki.com/>

~~~
fsavard
If you want your wiki to be public, or accessible from multiple computers,
MediaWiki (along with dozens of other web-based wikis) is a good alternative,
sure.

I like WikidPad because it's _fast_ in Edit mode (on-the-fly text formatting,
like code highlighting), and it turns out to be a killer feature for me:
without this speed I probably wouldn't be using it as much. With almost all
other wikis I know, you need to switch back and forth between edit mode and
preview mode, or they have a WYSIWYG editor mode (and I avoid that as much as
possible -- just a programmer's obsession... I like to deal with the source).

I haven't used TiddlyWiki much, but I loved the concept when I first heard of
it (self-modifying single file). It sure is a good way to get started fast.

~~~
b_emery
I'm a heavy user of tiddlywiki. I originally liked the portability of it, but
now it lives in my Dropbox folder which has been an awesome combination.

------
wensheng
There's a Freemind fork called Freeplane ( <http://freeplane.sourceforge.net>
) that has some additional features.

There's also non-opensource xmind ( <http://www.xmind.net/> ) that's much
faster than Freemind/Freeplane.

~~~
andrewflnr
Wow. Where has Freeplane been my whole life?

~~~
kimmel
I have been using freeplane for 3 years now to map out software projects. The
visuals you can produce really help others understand complex software
systems. I selected freeplane over freemind and vym after those two out and
finding them lacking features.

~~~
neilxdsouza
Thank you for vym. I had tried it a long time back (4 years or more) and
forgotten. Just created a mind map of my current project.

------
jpadvo
This all sounds very exciting. I've tried out mind mapping software in the
past for various things, and it has always seemed nifty, but I never really
stuck with it. Maybe the qualitative difference in experience the author talks
about will actually show up, in which case I certainly hope to stick with it.

~~~
davidarkemp2
It's worth taking some time to learn how to use FreeMind with just the
keyboard, and to learn how to do a mind map (see [1] for an overview). It can
be used exclusively from the keyboard, so you can get pretty quick with it.

I've not used FreeMind for (personal) documentation, but I've used it as a
specification tool, where I think mind-maps excel as they get you to focus on
all the component parts of the project - and drill down to the finest level
you can.

This use seems similar to using tiddlywiki[2].

[1] [http://www.thinkbuzan.com/uk/articles/view/how-to-create-
a-m...](http://www.thinkbuzan.com/uk/articles/view/how-to-create-a-mind-map)
[2] <http://tiddlywiki.com/>

------
erikcw
I've been a big FreeMind fan for years. Durring my wife's first year of law
school, I persuaded her to try using it for one of her classes. She proceeded
to quickly adopt it for all of her classes. Having a mindmap of an area of the
law at 30,000 feet, and then be able to zoom all the way down to the minutia
was very valuable.

Her peers started adopting it themselves after seeing her "outlines" in study
groups. Great tool!

------
__mharrison__
It seems my ability to memorize has gone down drastically since high school
(or probably elementary). I've messed around with freemind and orgmode and use
them to track some things, but keep going back to marked up notes (I'll
eventually convert to a cheatsheet if I use it enough) or books for
programming. I'll highlight things that I don't remember.

I personally don't have the gumption to memorize api's to all the different
modules in Python that may or may not be PEP 8 compliant. I don't want to
waste storage on how to set up ssh-keys when I do it once every X years. But I
know exactly in my book where it is documented and highlighted when I need it.
I can fall back to google if needed.

As a visually learner, I know where in my physical books this stuff is
located. Which is a drawback to ebooks as they re-flow there location of data
on a page isn't consistent... I'm digressing now.

------
engtech
Does anyone know of Doxygen <-> mind mapping tools that work well?

I'm a big fan of Doxygen for having the documentation live within the code,
but I find it lacking for drawing the graphical connections between things.

I've been looking at embedding UML using plantuml, but I figure there has to
be a better answer out there.

------
mrtimo
FreePlane is a fork of FreeMind and seems to have a much more active developer
base, and IMHO is a better product:
<http://sourceforge.net/projects/freeplane/>

~~~
cyber
Can you expand on why it's better? Consider I haven't used either, why would I
choose one over the other?

------
trippplezz
Good article. Your practices are so similar to my recent approach to learning
and organizing knowledge that it's scary ;) The only difference are the actual
tools which I think is non-essential.

So, when I'm faced with some bit of knowledge/howto/troubleshooting that I
encounter for the first time (at least from memory), I do the following:

* Launch Zim desktop wiki (<http://zim-wiki.org/>) opened with my Dropbox synchronized notes

* Add a new page with some descriptive but not overly long title (using the same principles as for the title line for the version control commit messages)
    
    
      * For example: "Python command line arguments"
    

* Write the tags for this particular bit of knowledge. This may sound repetitive but the number of tags needed (at least in my frame of mind) are usually 2 to 5.
    
    
      * @howto @python
    

* The actual content is written by myself, no copy and paste allowed. In this way I'm the one re-wording/restating the knowledge, so that the search queries afterwards will result in almost 'perfect' matches:

<CONTENT>

The command line arguments are accessed using the list sys.argv:

import sys

# Prints the name of the script

print sys.argv[0]

# Prints all remaining command line arguments

print sys.argv[1:]

</CONTENT>

When searching:

* Open the search dialog (CTRL+F), and enter my search string, for instance: "command line arguments"

Recently I've started using Anki for adding similar bite-sized facts about
Perl, bash, grep, sed, awk, etc. because in the past year or so I was
gradually 'forced' to become programming polyglot (I'm not there yet, though).
I was frustrated for the very same reasons described by the OP's article:
forgetting the little details when occasionally have to come up with a little
script or modify an existing one in a non-primary programming language.

Generally, I use Zim wiki for facts/articles that are not that small that will
be better as a flash card question/answer.

------
tom_b
I really think that memorization of the foundations and core of a programming
language you expect to need, even infrequently, is the key to levelling up as
a hacker.

Mind maps and/or spaced repetition techniques should both help tremendously as
learning tools for that effort. Restricting what you "have to know" when faced
with the need to know multiple programming languages feels like an important
part of being successful.

I speculate there is a strong levelling up effect associated with immersive
learning experiences, particularly with languages and idiomatic usage.

~~~
jdee
We are working in this space. <http://www.codesonic.com/> Our spaced
repetition framework is designed just for hackers. I've personally seen my
coding skills go through the roof while using it in beta. The time saved just
by knowing stuff rather than looking things up is an incredible boost to
productivity and problem solving.

~~~
shredfvz
YES. I'm not sure how codesonic compares w/ Skritter (a spectacular
Chinese/Japanese language spaced repetition learning system), but if it's is
anywhere close in quality, it could easily become the fastest and most
efficient method for learning programming. Best of luck to your team.

------
olleicua
Seems like cool software (if you're not cool enough to use emacs org-mode). I
can see how this would help a novice programmer get to the next level but I
keep these things in my head at this point. Once you learn enough about the
API of a given technology, looking it up the old fashioned way takes about 10
seconds anyway and more importantly I don't need to take time away from
programming to build the mind-map. The claim: "if you're already a 10x
developer it will basically turn you into a god" seems pretty unreasonable to
me.

------
discreteevent
A mind map can be a good way of getting a grip on legacy code (using the same
flow as the article but to document legacy code and not a programming
language). Freemind is excellent for this but I often just use a folding text
editor. The main thing about either is that you can go from 10000ft to ground
level and back up quickly which is what understanding a codebase is all about.

~~~
clueless123
Something that I've used for this is Fitnesse. It is a wiki that allows you to
document the legacy code _and_ a test bench to execute tests against the code.

------
andrewbinstock
I've used FreeMind for years for programming, for writing, for planning. It's
a great tool (as are many mind-mapping products) for design and for building
up information in an organized way.

However, the model has limitations not mentioned here. The primary on is that
it is an inherently hierarchical way of categorizing data. It's not possible
to put the same entry under two different branches or to create a link between
them (at least not in the products I've seen).

Ironically, in the video the OP admires that you can "link" population trends
and literacy by having them in the same mind map. But the only link is the
human one creating by manually clicking on the different branches where the
info is stored. There is no actual linkage between the items.

That being said, hierarchical is in many ways an excellent system for lots of
purposes, including some software design, and definitely in laying out
articles and documents.

~~~
zorlem
FreeMind (and I'd guess Freeplane) supports symlinks [1], [2] between nodes,
so you can break the hierarchy somewhat.

<http://freemind.sourceforge.net/wiki/index.php/Arrow_link>
[http://blog.mindleaders.com/wp-
content/uploads/2012/08/Freem...](http://blog.mindleaders.com/wp-
content/uploads/2012/08/Freemind.jpg)

------
Zenst
Everytime I see a mind mapping application it always reminds me of the old
days were people used to flowchart out programs before coding them.

With that in mind anybody rushing to download the first mind mapping bit of
software they come across need to learn a bit more planning, even if it is to
verify there choice is best for them or not. Though if your a python
programmer then the article does make that choice a little easier to dip into
the pool.

I will add that when it comes to coding if you can get your head around the
mentality of the coder then reading it becomes alot easier, this is why people
can read and work with there own code alot easier than others. This is were
standards help alot and take alot of the issues of programing out of your
hands, mostly for your own good even if you dont appreciate why at the time.

------
kozikow
Browser based vizualization is better:
<http://mbostock.github.com/d3/talk/20111018/tree.html> It's easier to share
and you can quite fast create cool tools based on some API's.

------
southphillyman
I envision this being a magnificent study tool for the following reasons:

a) People tend to learn better by writing/typing things out. b) Figuring out
how the topics will be organized will exercise your understanding of the
material. c) In addition to the flash card characteristics that you mentioned,
there will be rote memorization benefits as every time you look up a specific
topic you have related topics present in the peripheral and the association
between various capabilities will become innately engrained.

~~~
eliasmacpherson
I've read pop science articles saying that memory is hierarchical, topic based
and associative at the neuron level. Which kind of resembles a tree, like
this.

------
sunkencity
Can't live like that. Gotta be console. Why not have something like command-T
in TextMate or bash completion that finds what you are looking for. I find
that it's worth getting familiar with how to quickly search the api docks. I
have a poor memory for many things I consider unimportant, but I have a keen
memory of just about where I used what in my code, so I can quickly find what
I need by going to the right line in old projects.

------
jakek
Fantastic post - thanks for this!

Any thoughts on how to potentially apply these ideas to writing actual code?

For instance: imagine if there was an IDE for python that had the 'look &
feel' of FreeMaps. Then, perhaps, you would effectively gain many of the same
benefits applied directly to writing the program (ie: very dense; being able
to see forest and the trees).

------
mflanagan
I apply this approach and it has been a huge help, especially since I have
been moving from Windows to Linux and there are many useful commands to stash
away.

About six months ago I moved from Free Mind to workflowy.com and never looked
back (incidentally, I believe workflowy is a ycombinator company).

------
ericb
Does anyone know of a program like this runs on a hotkey that I could call up
while still looking at another program. I don't like the idea of leaving what
i'm doing to explore my mind map. I just want it there to call up, without a
whole separate app to context-switch into.

------
reinhardt
I've skimmed through several screenshots and videos on mindmapping over the
years and still don't get it. To me it seems little more than a glorified tree
structure. What would this buy me over, say, a wiki or (my favorite) a plain
text file in Markdown/reStructuredText?

~~~
alecdibble
I have tried both the Wiki and am now trying the mindmap method. For me,
mindmaps are much easier to visualize where content is and where content
isn't. Also, traversal is much less cumbersome. These two factors make a huge
difference in the overall usability experience of each. With a Wiki, it isn't
as intuitive which "areas" need to be filled in.

------
bonaldi
The problem these things have for me is managing the hierarchy. My entry for
"NSMutableArray", does that sit under "Data Structures", or "Objective-C" or
"Cocoa"? I can see that I'd want to make my way to it from all three trains of
thought.

------
toyg
I could see the value if projects actually _adopted_ mind-maps as first-class
documentation (auto-generated and whatnot).

As it is, I dread the idea of re-mapping entire chunks of documentation on my
own. I have better things to do with my time.

------
chaostheory
I like to use something called Codebox instead. It's just a quick note taking
and search tool that's geared towards programming:
<http://www.shpakovski.com/codebox/>

------
clueless123
Freemind rocks.

Mapping complex concepts in a similar way as I store them on my brain is a big
productivity buster for an old brain. Being able to share these maps with
other is a super productivity booster for the whole team.

------
jilebedev
The most useful context to use FreeMind, in my experience, is when planning a
project. After weeks of discussions and meetings and specifications, it's
difficult to remember all the details, nuances, and dependencies that simply
need to get addressed before project completion. It's simply not professional
to "forget" to address a legitimate, solvable issue raised offhand in a
meeting 4 months ago. It's fine if the issue isn't solved, but at least it
remains in the hopper and it is known.

Simple example:

    
    
      Product  
      - Features I'm excited to work on   
      -- the new customer lookup workflow  
      -- the Google mapping API
    
      - Features Customer has requested   
      -- bulk download and emailing of electrical schematics documents  
      -- text ripping of PDF invoice documents
    

Here's the kind of discussion that would ensue as a result of the above 6
nodes: \- How come only invoices need to have their text ripped? It's no more
or less trouble to rip text from 1000 documents vs 1000000 documents. Wouldn't
it be a nice feature to impress the customer with fulltext fuzzy search of all
their marketing and technical documents as well? I remember that conversation
- one of the engineering people asked me whether this was possible a few
months back. Hmm, this sounds like a document management system. I'm trying to
reinvent the wheel. This must have already been solved.

\----

As a result of asking "why X for foo here, and not X for bar there", it's easy
to be comprehensive and thorough. That is the secret sauce of FreeMind. If you
organize the tasks and ideas sensibly, you can apply simple questions to
analyze them and generate valuable ideas and ensure nothing is missing.

The second bit of secret sauce is: I have a deadline for end of week to
demonstrate text ripping features of the accounting documents. But but but -
the back of my mind is screaming - but that Google mapping API is really
interesting and I bet I could get it done in less than ten minutes. How cool
would be to map all their customer invoices on a map of the earth? And it
would be really nice to research an open source document management system.
And, and, it would be kind of neat to see if that system had a "bulk
upload/download" feature - I mean, that sounds sensible enough?

All those questions/concerns/thoughts are unfocused, de-prioritized _noise_.
I'm not getting anything accomplished and I'm in danger of getting even less
accomplished if I follow any of those thoughts.

To combat this in FreeMind, I simply create another toplevel node called
"Today's focus", drag the priorities into it from the other nodes, and then
_fold all the other nodes_ so that I don't become distracted.

... this, as evidenced by this sprawling post, still requires discipline to
work. :)

------
jvandenbroeck
I can understand that using freemind is an easy way to find functions & syntax
of a new language, and as a lot of users notice it's great to make manage
information or make notes but..

Using freemind is the solution to the problem "can't product quality code in a
language you don't know 100%"?!

You write quality code by knowing programming concepts, how to structure your
code etc. once you know which programming concepts a language you don't know
uses, you can look up the syntax of the language & program quality code with
the concepts you already know.

------
_lex
It sounds like what you want is really good, searchable documentation for
everything. I use dochub.io - it's pretty awesome.

------
ivanb
On a related note, what is your experience with mind mapping and outliners on
Android?

I was using FreeMind until it became Mindjet.

------
gruseom
Does FreeMind have good text search?

~~~
Alex3917
Unfortunately no, that's probably the biggest downside in my opinion. There is
a search function but it only does a good job at turning up the first match in
the entire map or subsection that you're searching in. Meaning that if you
really want to find one out of ten different places where one thing was
mentioned, you pretty much have to open up the .mm file in a text editor and
then find it that way. (And then go back into FreeMind, and search using some
specific phrase that only shows up in the node you're looking for.)

Fortunately because the whole point is to make it easy to find stuff without
search it is only rarely an issue, but it is really annoying when you need it.

~~~
eliasmacpherson
you should probably press ctrl-g the next time you press ctrl-f to search for
something in Freemind, to see what happens.

The search is better than I thought, as it will treat whitespace in between
terms as the equivalent of ".*" in grep/vim search.

So ctrl-f "C++ class" will return the first match if it is "C++ will resume
after class", and ctrl-g will find the next deepest match. My only problem
with Freemind is that it's java based, so it takes 10 seconds to start up and
it craps out with too many nodes. This makes it irritating to take notes after
you reach a certain point. I don't like xmind at all either.

