Program above and beyond your actual ability by using FreeMind
alexkrupp.typepad.com
alexkrupp.typepad.com
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 .
That said, this post is a reminder that I should be tracking more documentation and code snippets in this way.
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.
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?
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/
If anyone's interested, I wrote a (very small) vim plugin so that I can use an environment I'm already accustomed to. (It just automatically turns WikiWords into links)
It's probably got bugs.
I also came across this: http://tiddlywiki.com/
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.
I'm still looking for the ideal process of capturing what I know about a certain topic. Programming is very different from other topics from my experience because you usually want to include syntax or some short examples and so forth.
I think it may be better to use a wiki or something for programming but would love to hear how other people structure their stuff.
Mindmaps works really well for non-fiction books and lectures. I use them as review and overview tools and love it.
FWIW, I prefer doing it on paper because I feel like I'm a ton less creative when using computer tools.
Oh and if someone knows of any online courses a la "learn to draw icons for mindmaps" I'd love to hear about it. My drawing skills are mediocre to say the least and it's something I'd love to work on.
For me, the most useful aspect is how I can express a thought in a very thorough manner, and form several related thoughts I've had into a unified structure.
I used to log ideas and interesting texts, too, but I don't have hundred of them despite working two months on them. I have about 25 sections. This is because of my focus on rewriting them over and over again in the intention of developing them into essays or projects. They are at: http://kibabase.com/articles/notes-and-thoughts
But for the reader there's a definite advantage: you know exactly what has changed, and whether a site is updated regularly. I have a small blog, and on some entries I maintain changelogs manually. I suppose the best would be for Wordpress and the like to offer the ability to link to cleanly-formatted diffs (ala revisions in google docs).
(and just a heads up: I think your link should point to http://converspace.github.com/specification/... your link gives me a 404)
There's also non-opensource xmind ( http://www.xmind.net/ ) that's much faster than Freemind/Freeplane.
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... [2] http://tiddlywiki.com/
I'd definitely recommend FreeMind, because as I alluded to in the article basically all other mind mapping software is designed for creating presentations and pretty graphics rather than for organizing and condensing enormous amounts of information. So if you've been using other software then there would be no way for you to get the full experience. (It's free open source software that's licensed under GPL, and it runs pretty well even on 5+ year old computers.)
Anyway it took me a few years to really learn how to use it properly. I think this is partly because there haven't really been many good examples of people actually using it well online. Most of the examples are just people using it the same way they would use other mind mapping software. So that's why between the python.mm file, and also the video, hopefully that shows two really substantive for the software and then people can kind of learn the best practices for themselves through osmosis.
I should mention also that the python.mm file includes the documentation for not just Python, but also for Jinja and Less:
http://www.alexkrupp.com/files/python.mm
I would have included my sections on JavaScript and HTML/CSS, but unfortunately they mostly come from various published books so I didn't think the publishing companies would be thrilled with that.
Her peers started adopting it themselves after seeing her "outlines" in study groups. Great tool!
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.
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.
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.
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.
I signed up, feel free to hit me up and tell me more about what you are doing. zeljko at gmail
[1] http://www.butunclebob.com/ArticleS.UncleBob.TheBowlingGameK...
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.
http://freemind.sourceforge.net/wiki/index.php/Arrow_link http://blog.mindleaders.com/wp-content/uploads/2012/08/Freem...
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.
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.
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).
About six months ago I moved from Free Mind to workflowy.com and never looked back (incidentally, I believe workflowy is a ycombinator company).
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.
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.
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. :)
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.
I was using FreeMind until it became Mindjet.
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.
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.