Where as a developer do like to you keep your code snippets, links, checklists, final solutions to problems etc?
I've fooled with Google Notebook, MS Onenote, TreePad, textfiles, and Evernote a bit (currently leaning toward Evernote). All have pros and cons but none seem to be really suited to developers. Is anyone super-happy with a collection / note system that's not just generic GTD, but with developer-centric utility?
I like physical notebooks. Preferably small ones (4x6 or 5x8, not 8.5x11), permanently bound (spiral bound, book binding, etc.).
One notebook per project, typically, unless they're really small projects, in which case I reach for a partially used notebook and add to it.
I find it very helpful to grab a notebook off my shelf and re-read my maunderings from when I was thinking my way through something. Scribbling on paper lets me record partial thoughts instead of doing a 'finished' write-up. This lets me revisit my thought process in addition to the solutions I found -- and that tends to be more enlightening than merely recording a solution.
UPDATE: I'm extremely gratified at the response of my peers to this simple answer, and so I thought perhaps I should elaborate on my methods.
First off, I find the typical Moleskine notebooks to be too small, and they tend to be expensive. I usually use something like this one from Staples [1].
Top of each page: Project name, Page number, and Date I started writing on this page.
Daily: Draw a line across the page, and write the current date (and sometimes the time) down before adding more notes. It's helpful to see the gaps of time in working out ideas. And I often find my best ideas turn up just below one of these lines -- that is, after I've thought for a while and come up with something.
Review and Redact: If I've written out a few ideas of directions to go, and later I decide on one of them, I make sure to go back to the original list of ideas and add notes; specifically, I'll hilight the chosen solution somehow (underline, circle, etc.), and add a reference to the new page where I wrote down why I chose this solution. Also, I try to make these revision notes in a different color ink, or written at a different angle, or make them in some other way obviously not part of the old information.
Reference: If I flip back to look at something, I consider jotting down 'see pg. 13' so I don't have to go flipping around for that information again. I also never hesitate to refer to other project notebooks, noting them with 'See proj. Alpha, pg 23' or something similar. Sometimes I backlink that notebook as well, say in Alpha pg 23 a note 'Very helpful for proj Beta pg 7!'. These sorts of notes across projects are fairly rare.
I'm sure I've left out some of my other ideas and techniques. Perhaps others could add their ideas and techniques here as well? I know I'd appreciate hearing them!
[1] http://www.staples.com/office/supplies/p1_Steno-Memo-Notebooks_98429_Business_Supplies_10051_SC1:CG10:CL140571Start a blog. This way, not only you benefit, but so do others who may have the same problem. There are also combination blog/wiki systems, ranging from Drupal [1] to Hiki [2]. Also, consider that having your notes on a host (with regular back ups) will ensure that they survive you dropping your laptop down a flight of concrete stairs, and that they will be available even when you're away from your primary working machine.
Oh, and some people really like mind maps [3] for brainstorming and such, but I'm not sure that they're that valuable for long-term note taking/storage.
UPDATE: If you don't really want to run your own site, or a blog is too much of a time investment, another option is to start posting on RefactorMyCode [4] or Snipplr [5]. You get a searchable database of your code snippets, plus perhaps people will comment on your code and suggest improvements. The " Code reviews on the web [6]" thread might have more ideas over time.
[1] http://drupal.org/It's great all your notes get cross referenced.
TiddlyWiki is a single HTML file which contains all the articles ("tiddlers") for a small wiki. It also contains all the styling and javascript to make it work as a wiki (displaying / hiding articles, generating menus, etc). Fans find it a very intuitive way of constructing a document.
... although it's not just a document - one might almost say it's a tiddly wiki!
The only problem is how to keep it in sync in multiple locations.
Possible solutions are:
capability.principal.codebase.p0
. (4) In the line that has capability.principal.codebase.p0.id
, change the second argument to point to your TiddlyWiki file (e.g. "file:///C:/dir/dir2/TiddlyWiki.html"). (5) Save. - Kyralessa
An oft over-looked application is OneNote [1]. You can share your notes on a network share, over the Internet as well as from within SharePoint or just keep them private on your own PC.
If you're a heavy Windows user, OneNote integrates with every other MS Office application. Will sync with Outlook todo lists as well as with PDA's and Smart Phones.
I've been using OneNote for at least 6+ years now and would be lost without it.
Summary of Comments and Other Capbailities
Sample Usage (from comments)
I use it on a tablet, and it's great, for example, for deriving equations, as you can write the equation with the pen, and then type a paragraph of descriptive text, and insert a link from the web.
Best Comment
[1] http://www.microsoft.com/onenoteI wish it was available for Linux, as it's the only reason I use Windows.
A Moleskine!
Depending on the nature of the project and the size of your development team, a number of methods are necessary to adequately cover all of the bases:
For day-to-day notes, reminders, and sketches, I still haven't found anything as good as an old-fashioned pen & paper notebook. Part of the beauty of this solution is that your notebook can be as organized or as chaotic as suits your style. I don't think there is any best way to use a notebook.
A wiki is great, but I find that in order to get the most out of it, it has to be a common wiki used by everyone on the team or in the department. TiddlyWiki [1] is an excellent piece of software, but it is designed for individual use. You want something more like MediaWiki [2] that can be set up on a central server.
The focus of your wiki should be on practical documentation. It should be rife with FAQs, tutorials, How-To articles, sample code, and so forth. Ideally, any time somebody on your team hits a stumbling block and has to learn something specific to your company or project, they should contribute an article to the wiki about it.
Avoid email for documenting things such as gotchas and best practices. Many people tend to reach for email when they first identify a recurring problem and want to publicize the solution. The problem is that email tends to be hard to find weeks later, which is when the problem being discussed will most likely resurface. The best thing to do is to write a wiki article and then send an email to publicize the article. A good wiki will have a much better signal to noise ratio than a typical email inbox.
A blog is a useful tool for personal development and communicating your experience to other developers. However, writing a good blog tends to be a lot of work, and may prove to be too much of a distraction within a software development team. Also, blogs lack the hierarchy that a wiki has; they capture information in chronological order, and therefore suffer from the same issues as an email inbox to a small degree.
If your team or department is large, a forum might be a useful alternative to email, and may also be a convenient dumping ground for transitory topics that don't belong in a wiki. A forum can be a useful place to track fire-fighting style issues that occur suddenly, affect many team members, and may require some discussion or exploration. It can also be a place to post light-hearted stuff such as funny web links or other topics that team members use to blow off steam.
Generally speaking, the most important things to have are the paper notebook, the bug-tracking DB, and the wiki. Blogs and forums are good to have, but not as effective for capturing simple, straight-forward documentation. So far I haven't found any single piece of software that is effective enough to replace a combination of individual notebooks combined with a central wiki and a central bug database.
It should also go without saying that your project should use some sort of version control software. :)
[1] http://www.tiddlywiki.com/I use Emacs Org-Mode [1] along with Remember Mode [2] to keep track of everything. TODOs, appointments, notes, etc. With Org mode and Remember mode integration, plus a shortcut key defined in my window manager, I can hit a shortcut key from anywhere (Win + R in my case) and pop up a new Emacs window, select which type of item I'm saving (TODO, appointment, note, etc) and then quickly type what I want and then hit C-c C-c. The note is filed away to a default location for me to organize later if I so choose. This is so simple and convenient that I don't have to interrupt my flow of thinking if I suddenly think of something I need to do or take some notes on a given task. "Just what are the steps again for setting up a remote git repo? Okay, I do this and this and this. I had better write this down before I forget."
[1] http://orgmode.org/FWIW, I'm really digging Evernote right now. The searching works great making it really easy to find code snippets. The tagging is nice also. Honestly, best feature by far is having a Mac, Windows, and Web client that auto syncs. Your notes/snippets are available anywhere..
oh.. and it's free..
Use a Wiki. I personally use ScrewTurn Wiki - Desktop Edition [1]
[1] http://www.screwturn.eu/DesktopEdition.ashxI use a directory of text files. Roughly looks like this at the moment :
admin\
important-stuff.rst
development-log.rst
development\
projects\
proj1\
overview.rst
...
proj2
reference\
some-topic.rst
I use the ReStructuredText (rst) format for the individual files so its easy to generate html. Of course markdown would work almost as well :)
in development-log.rst I put entries for each day with current tasks and just general notes for stuff that comes up. Each new project starts with an overview.rst and can then expand into new files on specific topics as needed.
I manage the whole tree as a local bazaar [1] tree so i can check old versions if necessary.
To search I just use my editors built in search - or index using a desktop search tool.
I used the rsync the whole tree up to a ssh server every day to use from home as well - but thats not an option now that I'm behind a corporate firewall.
btw - this editting widget is actually pretty cool. I like the combination of editting in a plain text format combined with live preview. Works well.
[1] http://bazaar-vcs.org/Tomboy [1] for Gnome. That's pretty much like a wiki but it's a client application.
[1] http://www.gnome.org/projects/tomboy/I have just started using Evernote. Its searchable, you can publish it to the net and accessible from anywhere.
Scan in your original diagrams to go along with the code.
And its free.
DokuWiki [1]
DokuWiki is is targeted at developer teams and mainly aimed at creating documentation of any kind. It has simple but powerful syntax which makes sure the data files remain readable outside the Wiki. (All data is stored in plain text files – no database is required.) Optional syntax highlighting of code blocks is another neat feature most programmers find useful.
[1] http://www.dokuwiki.orgI use a Google Notebook. I like the fact that I can access it from any computer with Internet access, and the format is simple but useful. The searchability is a big plus, and I can share it with other programmers.
We've talked about creating a team wiki, but I'm glad that my notebook only has things that are useful to me. The exercise of putting things into my notebook also helps me remember the things that I've taken the time to add.
Plus, the handy cut-and-paste. Hardbound notebooks have a real disadvantage when it comes to pasting in code snippets.
I use a password protected, private instance of Media Wiki. (It's the same backend that Wikipedia is based on).
I use Emacs, and dump everything into text files, typically in a src/snippets
directory. Then I make sure that my OS provides fast full-text search. For group projects, I use MediaWiki and a searchable bug tracker.
Blog posts are great for more involved answers.
It's not developer centric but I find a really natural way of keeping notes is TiddlyWiki [1]. I find the natural structure afforded by the wiki metaphor a really quick and easy way to organize notes well.
I always use it when condensing a large text about a technology into a small piece of reference material or when planning a piece of work.
There are some issues when saving locally with the Java applet though so be careful to make sure it is working before making extensive notes.
Edit: None of this is a replacement for being able to Hold a Program in One's Head [2].
[1] http://www.tiddlywiki.com/I've been using freemind for a few months. http://freemind.sourceforge.net/ It's a mind mapping tool. It essentially builds a tree with text nods. Very quick to use, and it also allows you to easily assign a context to a particular note, by adding the note to the appropriate parent node. I also use a small notepad when I'm walking around.
I go through 100s of post-its a month.
Then I also have a WordPress blog with some code syntax hilighting plugins that is behind an .htacces password.
AbstractSpoon ToDoList. Ultimate tool for everything.
http://www.codeproject.com/KB/applications/todolist2.aspx
Personally? While I'm planning and designing, I'm a big proponent of good old fashioned pencil and paper. I have yet to encounter a diagramming tool that's as natural as sketching out the boxes and arrows myself, and during the design phase my work is equal parts pseudocode, quasi-UML, interface sketches, and checklists.
For notes that I want to share with my team, I prefer to use the wiki that's built in to Trac [1]. It's integrated with rest of the issue-tracking environment, so you can do things like easily link to tickets, source code, revisions and changelogs. We've found it to be a great place for the kind of notes and discussions that you mention.
[1] http://trac.edgewall.org/I strongly recommend FlashNote [1].
It is so convenient - just ALT-S and type then ALT-S away.
I find the newer version interface is the tiniest bit clunkier than the old version but it's still the smoothest note taker around.
I can't recommend this program any more - every person I've introduced to it, developer or not, loves it and uses it.
NB: Windows Only
[1] http://softvoile.com/flashnote/I use Trac [1] tickets to keep my memo and to-do-list, with subversion integration, it can also easily manage my personal projects and scripts.
[1] http://trac.edgewall.orgI find that the less time spent on the tool the better. I often have 2 files going: ideas.rtf and todo.rtf. The former is a collection of random thoughts while the latter thoughts that have a temporal nature (e.g. tasks, etc). The reason I bring up the format and not the editor is because my notes then end up being portable and editable by almost any tool .
However, if I had to name a tool I would say TextEdit on the Mac. You can't beat the cmd-+ keystroke for enlarging text. A quick way to establish structure and layout in a notes document is essential.
A variety of tools depending on exactly what I'm saving. I use Evernote for saving notes, webclips, links, code snippets and the like. I really like it so far. Tasks and checklists go in Remember the Milk (though I just started trying out OmniFocus). Random ideas get written on vertically ruled index cards for the initial note and get filed away in one of the electronic systems.
Snippley is a neat little Adobe Air app done by the guys who manage MooTools, made specifically for storing little snippets of code. You might find it useful: http://code.google.com/p/snippely/
We use FogBugz, and all notes from the dev team go into the wiki. There are also general engineering/networking questions, and they go into an engineering wiki.
This way, even quick notes are found in one place and last forever. And you have the added benefit of being able to easily correct or update older notes.
if you are working on something that may be patentable, use a hard-bound notebook with unlined pre-numbered pages. have it notarized periodically.
otherwise, notepad works for me ;-)
I've been programming for over 20 years and sadly I have had the same problem as the OP, until I discovered the LiveScribe pen this year.
It has totally changed my note-takeing life! It has 4 main benefits:
I honestly can't recommend this enough. It's like GPS for me; once you've used it, you can never go back!
I have a directory called "notes" with just three sub folders, unix, java and confs (for working config and property files). It is backed up in subversion and mirrored between my laptop, work laptop, work desktop and my server. Many of the files have names like "find-command-examples.txt" , "cusip-validate-via-regex.txt" or "jboss-jndi-with-openldap.txt"
Plain text is the way to go. And fewer folders is better since you don't waste time deciding if something should go into "unix", "shell" or "scripts"
On my Mac I use spotlight to search. On unix I use grep. On windows I use the cygwin find command.
If you need formating, consider rtf since you'll still be able to grep. Or use find with rtf2txt to keep plain text versions.
I've like to evolve my notes in a wiki site (I use SharePoint but any wiki system would do) to share internally with my team members. From there, depending on the topic and how much "churn" there is with the content, I migrate notes into more formal documents that can be version controlled.
My concept is not really specific for developer-centric purposes, but the idea of a wiki works great for situations involving a team of peers.
I'm old school. Plain old text file using my favorite text editor TextPad - http://www.textpad.com/
Dropbox
Just combine dropbox [1], your favourite text editor [2], and a folder of markdown formatted text files.
It has the following advantages:
After 25+ years as a developer, many of them spent writing notes (I'm an inveterate scribbler) I'm really over paper notes.
They are bulky, you can't search them, can't back them up and can't carry them around that easily.
Modern OS, especially OS/X which I use as my main desktop, are really good at finding things so the most important thing is just write stuff down. You can worry about getting the where right later. That's also a lesson for wiki users - we had a very successful wiki (using Twiki) at CSIRO where I worked with many scientists and the number-one lesson was to record now, edit later.
Having said all that, I'm naturally a tactile and then visual thinker. I tend to sketch solutions. To keep everything searchable, simple, diffable and able to be used in a wiki and in Doxygen, I do many of my diagrams with GraphViz. That way I just have to describe the diagram in a simple text form and the picture is generated. I use GraphViz (strictly, the dot tool) for schema documentation, calling sequences and casual architecture diagrams because it's the fastest possible way to get a picture recorded.
As a self-education and self-improvement excercise, whilst it is useful and fun to be able to leaf through past notes in a notebook, I think it is actually better to be actively editing and commenting on past work. I think you're more likely to lay down new associations in your brain if you're handling the material by pulling bits out and writing them up or classifying them in relation to other bits of knowledge. This is also one thing you can do to mitigate the linear style of blogs - maintain index pages pointing to your better postings.
If you are using VS try CodeKeep [1] ( just in case you did not read about it above )
Start blogging ( Even if nobody reads it ... as mine ; )
copy , paste to blogger
I use small copy paste snippets to Blogger. It sends automatically e-mails to my Gmail account. Install Google Gears - for example I do have my regular searches such as "cmd cheat sheet" or "perl cheat sheet". I tag each code snippet with easy to remember tags ... Thus later on when I need them : Start - Run , type Opera , Ctrl + 1 - access Gmail type / to focus on the search tab , type "tag " , hit Enter
whell it is most probably there , Copy Paste and use it.
use a fake class I also have the following type of fake class, which does help if you type HowTo.DoSomethingSuggestedByVSIntellisense
using System.Text; using System.Diagnostics; using System.Collections.Generic; using System.Collections;
namespace GenApp.Utils.Theory { /// /// This is fake class for quick copy paste. Usage: /// type HowTo. - the intellisense will display the names you have figured out for each fake method /// select the name from the , click in it , right button , G , will get you there , /// copy paste the text , Alt + F, C to close and remember to delete the fake call. /// public class HowTo {
public static void UseRegexesWithWhiteSpace ()
{
//how-to use regexes with white space
// Regex re = new Regex(
// @" # This pattern matches Foo
// (?i) # turn on insensitivity
// # The Foo bit
// \b(Foo)\b "
// , RegexOptions.IgnorePatternWhitespace ) ;
// for ( Match m = re.Match( "foo bar Foo" ) ; m.Success ; m = m.NextMatch() ;
} //eof method
public static void DisplayJavaScriptConfirmationDialog ()
{
//Active_chkbox.Attributes.Add("OnClick" , "return (confirm('Do you want do disable this user'));");
} //eof method
public static void RegisterPageStartUpScript ()
{
//how-to Page.RegisterStartupScript(@"startup",@"<script>alert('Thank you!');</script>");
//string JaScript = "<script language=’javascript’> alert('User Details saved successfully') </script> " ;
//Response.Write( JaScript );
} //eof method RegionsterPageStartUpScript
public static void AddCallingMethodNameToDebug ()
{
string code = @"
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string mName = st.GetFrame(1).GetMethod().Name;
";
} //eof method AddCallingMethodNameToDebug
public static void SettersAndGetters ()
{
string help = @"
how-to generate those in textpad F8 how-to Generate member accessors , properties for C# asp.net with textpad how-to setters and getters find:^(.*)$ replace:private string _\1 ; \n public string \1 { \n \t\t get { return _\1 ; } \n \t\t set { \1 = value ; } \n } //comm -- eof \1 property \n\n find:^(.) (.*)$ private string s\1 ; \n public string \1 { \n \t\t get { return s\1 ; } \n \t\t set { s\1 = value ; } \n } //comm -- eof \1 property \n\n
FIND:first remove all the [] from the copy paste of the table create screipt ^\t[([a-zA-Z_])](.)$ FIND type and var ^(.) (.)$ REPLACE Properties
//for the constructor _\2= this.\2 ;
//for the passing to the constuctor \1 _\2 ,
/* ^(.) (.)$
";
} //eof method SettersAndGetters
public static void ListAllDbObjects ()
{
/*
--HOW-TO LIST ALL PROCEDURE IN A DATABASE
select s.name from sys.objects s where type = 'P' or type='UP'
-- GET THE GENERATED ONES ONLY
select s.name from sysobjects s where type = 'P' and s.name like '%gsp%'
--HOW-TO LIST ALL TRIGGERS BY NAME IN A DATABASE
select s.name from sysobjects s where type = 'TR'
--HOW-TO LIST TABLES IN A DATABASE
select s.name from sysobjects s where type = 'U'
--how-to list all system tables in a database
select s.name from sysobjects s where type = 's'
--how-to list all the views in a database
select s.name from sysobjects s where type = 'v'
Similarly you can find out other objects created by user, simple change type =
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = In-lined table-function
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table ( this is the one I discussed above in the example)
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure
*/
} //eof method
public static void GetProcedureMetaData ()
{
string answer = @"
select PARAMETER_NAME as 'COLUMN_NAME', DATA_TYPE , CHARACTER_MAXIMUM_LENGTH AS 'MAX_LENGTH', IS_RESULT , PARAMETER_MODE from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='Login_Check'
Select * from INFORMATION_SCHEMA.Routines --returns stored procedures and functions
exec sp_HelpText 'Login_Check'
";
answer = string.Empty;
} //eof method
public static void GetRowColumnValuesFromDs ()
{
//(ds.Tables["TableName"].Rows[0]["ColumnName"] == DBNull.Value) ? false : (bool)ds.Tables["TableName"].Rows[0]["ColumnName"];
} //eof method
public static void CopyMeAsTemplateMethod ()
{ } //eof method
public static void ReflectionExample ()
{
//Type objectType = testObject.GetType();
//ConstructorInfo[] info = objectType.GetConstructors();
//MethodInfo[] methods = objectType.GetMethods();
//// get all the constructors
//Console.WriteLine("Constructors:");
//foreach (ConstructorInfo cf in info)
//{
// Console.WriteLine(cf);
//}
//Console.WriteLine();
//// get all the methods
//Console.WriteLine("Methods:");
//foreach (MethodInfo mf in methods)
//{
// Console.WriteLine(mf);
//}
}
public static void shortcuts ()
{
string _shortcuts =
@"
//how-to shortcuts
Ctrl + Shift + F -- recursive find
F3 -- find next occurence
Ctrl + H -- find and replace
Ctrl + M + M -- collapse method
Ctrl + B --- set a break point
CTRL + “-” and CTRL + SHIFT + “-” -- web browser like backward and forward in code
Ctrl + Tab --- shift tabs
Shift + F5 --- stop debugging
Ctrl + I --- fast search
F5 -- start debugging
Tryf = try and finally block
Prop = property with get and set accessor
Switch = switch statement with default
Alt + W , L -- close all windows
Alt + W , 1 -- open the first window
Alt + F , F , 1 -- open the latest file I closed
Ctrl + F2 , Tab -- go to the methods dropdown , type a letter to get to the name of the method
Alt + L --- select the Solution Explorer
Ctrl + Shift + Z -- press 2 (needs arsclip (google download arsclip)) -- get the second latest entry from my clipboard
";
} //eof shortcuts
public static void redirectToCurrentUrl ()
{
string _redirectToCurrentUrl =
@"
Response.Redirect ( System.IO.Path.GetFileName ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) , false );
";
} //eof method
public static void formTypes ()
{
string _formTypes =
@"
//how-to forms 1 - Empty Search Form , 2 - Filled Form , 3 - Empty New form ( new Margin Data , new Project )
//how-to formTypes
//, 4 - filled search form from get by id procedure
// 5 - FilledSearchForm (coming from params)
";
} //eof formTypes
public static void GetTheFileNameWithoutTheExtension ()
{
/*
System.IO.Path.GetFileNameWithoutExtension ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) );
*/
} //eof methoed
public static void GetThePhysicalRootPathNoExtension ()
{
//how-to get the physical root path on the file system of the application
//Utils.Dbg.Debugger.WriteIf ( "My rootPath is " + rootPath );
} //eof method
public static void AccessConfVariables ()
{
//how-to access conf variables BL.Conf.Instance.Vars [ "varName" ] would give you "theVarName ;
} //eof method
public static void GetRowColumnValue ()
{
//how-to get row column value
//(ds.Tables["TableName"].Rows[0]["ColumnName"] == DBNull.Value ) ? false : (bool)ds.Tables["TableName"].Rows[0]["ColumnName"] ;
} //eof method
public static void GenerateExtendedPropertiesForATable ()
{
//table column
//find:^(.*) (.*)$
//Replace:
//EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'title="\2",visible="1",fs="Basic Details",readonly="1"' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'\1', @level2type=N'COLUMN',@level2name=N'\2'
} //eof method
public static void RedirectToTheCurrentURL ()
{
//how-to redirect to current url = users.aspx or projects.aspx
/*
Response.Redirect( System.IO.Path.GetFileName ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) , false );
*/
} //eof method
public static void THEORY ()
{
//EVENTS AND DELEGATES IN ASP.NET -- http://msdn.microsoft.com/en-us/library/17sde2xt.aspx
} //eof method
public static void ReplaceDebugging ()
{
/* find : replace
^(.*)([^\/\/])(Utils\.Debugger)
\t\t\t\t\t//Utils.Dbg.Debugger
*/
}
public static void UseStringBuilderInsteadOfString ()
{
//Bad
string s = "This ";
s += "is ";
s += "not ";
s += "the ";
s += "best ";
s += "way.";
//Good:
StringBuilder sb = new StringBuilder ();
sb.Append ( "This " );
sb.Append ( "is " );
sb.Append ( "much " );
sb.Append ( "better. " );
} //eof method
#region SomeObject.Value = SomeValue ?? null;
class SomeObject
{
public string Value { get; set; }
}
public static void DummyAssignValueIfNotNull ( string SomeValue )
{
SomeObject SomeObject = new SomeObject ();
if (SomeValue == null)
SomeObject.Value = null;
else
SomeObject.Value = SomeValue;
}
public static void SmartyAssignValueIfNotNull ( string SomeValue )
{ //Instead of this:
SomeObject SomeObject = new SomeObject ();
SomeObject.Value = SomeValue ?? null;
}
#endregion SomeObject.Value = SomeValue ?? null;
//<source>http://stackoverflow.com/questions/28637/is-datetime-now-the-best-way-to-measure-a-functions-performance</source>
public static void MeasureMethodPerformance ()
{
Stopwatch sw = new Stopwatch ();
sw.Start ();
// Do Work to measure
sw.Stop ();
string StrDebug = string.Format ( "Elapsed time: {0}", sw.Elapsed.TotalMilliseconds );
} //eof method
public static void GenerateResxFileOutOfListing ()
{
/* FIND: ^(.*)$ REPLACE: \n value\n comment \n\n
*/
} //eof method
} //eof class
#region implement IEnumerable for a type public class ClassImplementingIEnumerable : IEnumerable { public IEnumerator GetEnumerator() { yield return "x"; yield return "y"; }
// Explicit interface implementation for nongeneric interface
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator(); // Just return the generic version
}
} //eof class #endregion #region implement IEnumerable for a type
} //eof names
I use http://www.backpackit.com/ by 37signals [1]. I can create pages add lists, notes, files, pictures, writeboards and tags and then search anything I previously added. It is not developer specific, but it works for me.
For snippets I have one page for each language I use and each snippet is a note with files (sometimes).
[1] http://www.37signals.com/I find it surprising that nobody has mentioned the notes built-in support in Opera. You can access the notes whenever you're browsing with a shortcut (Ctrl-Alt E), which will prompt you to the notes tab searchbar, You can even synchronize your notes so that you'll only have one big repository of notes in any Opera browser that you use, thus you can be in Linux, Windows, Mac and still read your notes.
I use it all the time whenever I can't recall how I did something before but that I have a hunch that I might have made a note for it, I just bring the notes from Opera and type whatever I can remember from that note, and voila! There it is.
Although, it could be said that one of the drawbacks of Opera notes is that you can't format your text.
I'm surprised no one has mentioned Pocketmod [1] yet. It's basically a DIY origami notebook. You can customize the pages to suit your needs. Personally, it's either lined pages or graph paper. I'll usually have a few in my backpack for different projects.
While on the computer, I'll send myself an e-mail with my note. Using GMail's search engine, I can usually find any note quickly.
[1] http://www.pocketmod.comI'm using Leo [1] for this kind of stuff.
Description from the homepage, for lack of a more personal note:
Index cards and a spiral notebook.
I use PersonalBrain as my knowledge base. For me, it excels in storing code tidbits, patterns, project-specific data and general notes. Information is easily linked to other information, and I can quickly find any piece of information that I need in seconds.
For blazing quick creation and retrieval of stored knowledge, nothing else beats it.
(You'll find that the makers of PB try to sell it as a mind-mapping tool, I find other tools better like FreeMind better for that job.)
Ok, this is a mac-centric answer...
I used to use voodoo pad [1], which is a desktop wiki program. It's quite nice to use because it's a fully integrated mac app. You can copy and paste rich text into it and preserve the fonts and formatting and so forth. It's really pretty nice to be able to dump procedures, notes, stuff you received in email and so forth. And it has a great search feature.
One thing I should note -- I initially bought this application because I thought I could have a nice-to-edit desktop wiki, and be able to access it remotely through a webserver/wiki type interface. It never lived up to the hype though. Maybe it's better now.
Then I used Omni Outliner [2]. This had many of the great qualities of Voodoo pad, but would allow me to hide and rearrange things. It gave me the ability to prioritize stuff, and conversely, hide unimportant stuff. And search too.
Now, I'm using Omni Focus [3]. The Omni Group [4] came out with it after they came out with Omni Outliner, so I switched. It does most of the stuff Omni Outliner does, but with all the Getting Things Done (GTD) [5] goodies that helps you manage the tasks.
To be honest, I haven't really taken advantage of the OmniFocus extras, but it's part of the plan...
[1] http://flyingmeat.com/voodoopad/A combination of good old physical notebook and notebook in the cloud (Google docs).
Physical notebook is simply much better when I want to quickly scribble my thoughts and draw diagrams. And I can do this anywhere. Notebook in the cloud is good for copy-pasting code snippets. And it's nice because somebody else is doing the backup for me, and I can use it as long as there's internet access. I wish Google docs could do basic drawing and diagram though.
I am really liking EverNote [1] for general note management.
The older I get, the less information I seem to be able to retain, and I’m finding it increasingly necessary to write things down so I can reference them later. Since it seems I have forgotten how to use a pen or pencil to make legible characters on a piece of paper, I usually type this information into the computer. I have tried a number of ways to organize these digital "sticky notes". For awhile I was using the Notes feature in Microsoft Outlook , but that doesn’t really allow me to access my notes wherever I am, and it was awkward to use. I discovered I could use Yahoo! Notepad to sync with Outlook Notes, so I began to use that quite a bit - until I moved to Vista and Office 2007. For a long time, there wasn’t a sync client from Yahoo! that would work, and I found myself looking at other alternatives. A couple of weeks ago I discovered an application that is really working well for me. Evernote describes itself this way:
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at any time, from anywhere.
What’s nice about Evernote is that it is provides a Windows client that synchronizes with a web interface, so your information is truly available to you wherever you go. There are Mac, Windows Mobile, and IPhone clients as well.
This is not just for text. There is a simple rich text editor for taking notes in meetings or entering the bits of information you need to do your job or manage your life. Beyond that, you can store entire web sites (or just selected portions) quite easily using a Firefox extension. The program will also store scanned images, PDF files, and audio clips, but I haven’t really taken it that far.
Searching works well, and they claim to also search PDF files and text within images. Like Outlook Notes and Yahoo! Notepad, each note is assigned a title based on the first line. Evernote, however, allows you to rename the title. Notes can be organized into folders and assigned tags.
Synchronization also works well - even behind the firewall at work (it appears to use whatever HTTP proxy is configured in Internet Explorer). By default it syncs once an hour, but this is configurable, and you can force a sync at any time. I haven’t really tried using the web client. I have the Windows client running in the system tray so it quickly accessible.
Did I mention it was free? There is a monthly cap, but in my regular use I am not even coming close to the allotted upload allowance. The premium version is $45/year, which gives you SSL encryption as well as a much larger upload allowance.
If you are like me and need an application that will allow you to create your own personal knowledgebase , than I highly recommend Evernote .
[1] http://www.evernote.comI use a paper notepad and either windows' notepad or linux' kjots. Additionally I keep notes in the source code I am working on (mostly the 'why' something was down).
As someone said before: "Make sure to write everyhting down.".
I have been using a tool called clockingIt www.clockingit.com it lets me create projects and then tasks inside the projects. tasks have different priorities, severities, a description and a trail of comments I leave every time I update the task.
I mainly use this tool to track my time, so when I am working on a task I clock in on that task and at the end of the month it generates my timesheet.
it is open source as well. It is a great replacement for post-it notes and also keeps track of my time!
Try google docs, for some existing code, you can copy and paste it in really quick. Plus it's online so you can reference it when your on the road or home.
I use GMail [1] - it is searchable and available anywhere I have internet, and is long term memory.
[1] https://mail.google.com/mail/I ran into the same thing about 2 years ago. I wrote a little program that sits in the top right corner of my desktop that drops down and has notes and contacts. I'm not sure if the published version still works well, but the code is there so you can fix any bugs you want.
You can get it at http://desktopcontacts.sourceforge.net [1].
It is a little buggy. It was one of my first ventures into custom painting, but I find it useful.
[1] http://desktopcontacts.sourceforge.net/Set up a wiki. Its free and easy. Check out MediaWiki [1], the software that powers Wikipedia. I set that up on Fedora a couple of years ago. It was pretty easy to set up and use.
At my current job we use Microsoft OneNote which is also nice, but you have to have the software installed. Its easier to author, but if you want a wide audience then a wiki might be the better solution.
[1] http://www.mediawiki.org/wiki/MediaWikiUltra Recall - The most awesomest PIM / personal database / document manager evar. http://ultrarecall.com
Unfortunately it's Windows-only.
I regularly use Emacs and org-mode for note keeping. Its flat text format is easy to post in emails, diff with text processing tools, store in SCM systems in a meaningful manner, and so on. The nice UI shortcuts to add new 'note nodes', promote notes, demote notes, move them around, expand and collapse them, and the almost free-form style of the note text is nice when one spends a lot of time editing text (documentation, sources, etc).
For more details, if you are already using Emacs, check out: http://orgmode.org/
Um, I use the source code? Really. That's where you (or if open source/free software), somebody else will look for the algorithm, ideas and background to the code. Code snippets become examples or utilities. Checklists or release scripts become version-controlled admin scripts. This doesn't deal too well with diagrams, I admit.
Pencil and Paper are fine until that calamitous flood or fire comes along, also paper isn't very efficient for searching or copy/paste.
I use ToDoList [1] for TODO lists and a folder hierarchy of text files which I search and categorize (by folder name) through a custom explorer-like notepad app I wrote.
[1] http://www.codeproject.com/KB/applications/todolist2.aspxFor my work on enterprise applications:
Lots of notepads. I diagram a lot, and scratching it out is quick and easy. I can take it with me to a meeting or to QA or -gasp- a customer.
OneNote. Window Key + S. Instant Sizable Screenshots are worth their weight in gold. The notebooks are pretty useful to.
Code Comments and text help files in the repository. Thinking of your code as a product that has to be consumed by other developers, packaging it correctly can be a big help.
To do list. Wherever I can make them. Word, WordPad, Notepad, notebooks, OneNote, whittled into my desk. Should probably be number one. If you work on an application that can be your notepad, try that, too. It helps you find bugs.
For my web development
Trac. I love that thing!
See above.
Four things give me the ability to record and find every note I need for a software project.
vim
&TextMate, but there's no reason you can't be proficient at emacs
, Notepad 2, TextPad, or BBedit. I'm looking forward to learning sam
.grep
, find
, and Quicksilver.rspec
. Ideally you can generate documentation from those tests, saying which pass, which fail, and which are pending or ignored.svn
, or Mercurial, hg
.Tomboy [1] - a desktop wiki that just feels right with powerful search capabilities. With the newest release it goes multi platform.
[1] http://www.gnome.org/projects/tomboy/I blog at geekrant.org [1] - Google searches it, I get third party comments, it's great.
[1] http://geekrant.org/My trustful paper pad with a good pen. Always work. No bugs. Sometimes, I do have to fill the ink inside though.
I Use TextMate with Markdown for my notes.
For sending these notes to others TextMate has a nice preview feature for Markdown [ctrl]+[alt]+[cmd]+[p]
which allows to send your notes as a well formatted pdf.
i keep my notes in standard black engineering notebook. When complete, I usually put a dymo lable on the front detailing the date of the first and last entrries.
I've been writing on a blog (www.strugglingthru.net) and using Evernote. Evernote is especially nice because I can sync all of my notes across my laptop, work PC, home PC and my iPhone. Personally, I use the free Evernote service (which is pretty generous). But someone else said start a blog and write on it - I highly recommend that. It's a great way to give back to the community.
Edit: I also have an engineering notebook at work. They are invaluable for both you and your employer. Highly recommended.
I use the Mantis bug tracker [1], I use it for bugs, todos and notes for stuff I'm working on.
It lacks some features of FogBugz [2], but hey, it's free ;)
[1] http://www.mantisbt.org/I use a combination of a large Moleskine journal (which I break up into sections for different university courses and projects) and plain txt files (TextMate). The journal for conceptual stuff, the txt files for saving project-related emails and other text harvested from the web.
These days I'm using "Action Sheets" [1] from Behance [2] that I get at a local paper store for notes and diagrams in conjunction with Plain Text Wiki [3], a wiki plugin for TextMate [4], for notes and links. I backup and sync the wiki to other computers and my iPhone using Dropbox [5] (I just keep the repository in my Dropbox folder). (Previously I used svn, but Dropbox is more automagical and works with iPhone).
( viki [6] is a wiki alternative for vim)
[1] http://www.creativesoutfitter.com/Products/Action-Sheets/15I use Vim and the Viki plugin [1] - effectively a wiki using plain text and a plain text editor.
[1] http://www.vim.org/scripts/script.php?script_id=861Moleskine!
Zim [1] Desktop Wiki is a good outliner/note taker. It runs on your desktop as a normal application (not a web app). It stores its data in plain text files with wiki markup. Supports rich text and images. I use this app all day every day.
[1] http://zim-wiki.org/Simplest tools are best. I used notebooks for a long time, but got frustrated by no being able to search for stuff or take them your notes with you. Used OneNote on a tablet pc for a while. Has a lot to recommend it, but the notes are stuck on one PC (OneNote can actually share stuff around, but it's a bit fiddly) and tablets are expensive underpowered and short on battery life.
My primary thinking tool is a whiteboard and a digital camera.
I now use FogBugz - the combo of case tracking and wiki is very powerful. You can keep all your stuff in it. Easily re-work material into specs and docs. Share material with co-workers and create cases when it comes time to actually do something. And full-text search lets you find it.
My company hosts an instance of mediawiki internally, so I use that.
I find that I take a few sorts of notes:
Notebooks (pen and paper), One Note (when using tablet) and Sharepoint for more formal doc management.
Honestly I keep notes on projects, solutions and other notes in a more traditional fashion. I use a moleskine notebook, personally. I originally used a piece of personal wiki software called "Notebook". It works like just about any other wiki but it lacks image support and table support. However I found it was a hassle to add information. I'd spend way too much time formatting the information and get sidetracked from my main task. With a traditional notebook, I spent far less time formatting, and more time jotting down what I needed and resuming my work.
The main website seems to be down so I'll simply post the Wikipedia article about the software. http://en.wikipedia.org/wiki/Notebook_(software) I do highly recommend it if you do want a wiki approach with a small footprint.
I just use slickrun's jot to quickly store/read things with a quick shortcut. Probably not the best technique, but it's quicker than ^"100s if post-its", IMHO.
I use InkSeine [1] on my Tablet PC. It is incredible.
[1] http://research.microsoft.com/InkSeine/index.htmlI use wikipad which is basically a note taking tool that uses Wiki-like syntax
See: http://groups.google.com/group/wikidpad/web/home
todo.txt in the autostart-folder :)
To be able to track changes and remember how i thought 6 months ago i use a simple blog, together with my own sketching-homepage, Cosketch [1], to get some kind of image-support in the blog.
[1] http://cosketch.comFor notes and misc. code snippets:
CintaNotes [1]
I keep this portable app in a Live Sync (previously called FolderShare) folder, so it's always synced across home and work computers.
To-do lists and similar:
Also portable, I keep the .tdl files in that same Live Sync folder
[1] http://cintanotes.comOmnifocus! Best task/list/item tracker i have used so far.
i used doc.google.com ,it can have excel, doc files, and export them to be a office file. or you can just start a collaborative site, and post anything you like.
Postit Notes! Stickem to the monitor. Also NotePad and WordPad.
Jedit + Explicit Folding + Outline Plug-in
I got a bunch of plain text files on a directory searchable using Jedit's hypersearch feature. The outline parser plug-in offers a dockable tree view of the explicit or indent folding structured text. Other useful plug-ins are SuperAbrevs (folding header templates), CandyFolds (folding visualization) and more. Easy data syncronization with rsync (its just plain text files). www.jedit.org
http://plugins.jedit.org/plugins/?Outline
http://farm4.static.flickr.com/3403/3659402148_1bfbf18f99_o.png
I have 2 large physical notebooks.
One has "Reference" written on the front, and one has "Work" written on the front.
The Reference notebook I use for general study notes, or things I come across which I think it would be useful to remember in future (e.g. notes on JQuery or OO principles). I write a page number at the top of every page, and maintain a "Contents" list on the first page. If something comes into my head which I think it would be useful to learn about, I add it to a list on the back page, and then when I have some free time I pick an item from this list to read up and take notes on.
The Work notebook I use for more project-specific notes (e.g. brainstorming on a project design, or drawing up a task list). Again I number every page and maintain a contents list on the front page, although this contents list only includes references to important pages.
When I reach the end of a Reference / Work book, I start another one!
The best thing about this method is its simplicity, and its easier to mind-map / draw diagrams in a notebook than through your computer.
I find very convenient Notational Velocity for OS X. It a modeless, full text search engine for note taking. http://notational.net/
ToDoList [1], main file kept on multiple machines and synchronised using Dropbox [2]
[1] http://www.abstractspoon.com/I always have NotePad running and save an "ideas" file each day.
I wrote my own todo application, because I did not like the ones I saw on the internet. It's here: Niko's To do [1].
[1] http://todo.seasidehosting.stI love having a notebook to scribble stuff, but that's mostly for layouts/designs/etc. For code snippets I use gist [1]. They can be marked private, given titles/etc and are git repositories (!) so you can keep editing them and keep history with no effort.
[1] http://gist.github.comI have a glass desktop and I use wet-erase markers for all of my transient notes. I used to use dry-erase but they would rub off as things would slide across the desk. Not so with wet-erase.
If I really really need to keep the notes for posterity, I take a picture with my digital camera. I've only had to do this a couple times.
My memory is horrible. When I took my current job, I created an Access database to handle my notes. I've got links to documents and websites. Names of different servers. Copies of expense reports. The Bio I sent the HR Dept. There are code sample and SQL scripts.
It's searchable. Date stamped. I can write any report I want. It is nothing fancy. The key is, I work with Access a lot, so it was not that hard to build, manage and use.
If you want something that is accessible from the web, your phone, computer etc. I think 'Evernote' is one of the best products out there. It is everything I would want in a note app. I'm still learning more. The cell phone camera upload is perfect.
I use google sites to keep my notes and knowledge base.
This gives me web access, good integration with other google office tools, search, etc...
My head usualy works well, but for the times it does not, I use a small note pad, right in front of the monitor.
Tomboy combined with Gnome-Do. Part of Gnome on Ubuntu. It's not developer specific, but it's unreasonably useful, and integrates with Do brilliantly. I press Ctrl-Space, type some stuff, press tab, type note and then go to create or search, and it searches all my notes for that text, and brings up a list of results, or it creates a new one with that title. Works perfectly, and keeps everything indexed, which is a real problem I've always had with making paper notes. Where's the bit with my plans for this bit?
Also, you can combine this with dropbox with a bit of neat symlinking, and have all your notes kept in sync (with revision control) on all your computers, and backed up to the internets. Beautiful.
Microsoft Onenote [1] - excellent tool
It works on my PC and on my Windows Mobile phone.
[1] http://office.microsoft.com/en-gb/onenote/default.aspxI used to use Basket Note Pads [1] in KDE 3.5.x. However, after migrating to KDE 4.x, I am waiting for a KDE 4 version of it.
Currently, I rely on `physical' notebooks.
[1] http://basket.kde.org/I put everything in Evernote. Windows, Mac, iPhone & wev clients and it's all kept in sync. I even put PDF docs and PDF books in my Evernote notebooks, then I can access them anywhere.
I like it simple:
PSPad or UltraEdit helps in keeping your notes properly formatted (indentation). It's easy to move code snippets around.
With text files you don't have to deal with formatting, but you can use TiddlyWiki if formatting matters.
During meetings or discussions I use real notebooks. If I am bringing my laptop, I use my text files. If using notebooks, I record important information into my text files, too.
Firefox bookmarks synchronized online. I organize my Internet references using folders and/or tags. I make sure the bookmark title is very descriptive, so that you can take advantage of Address Bar search when accessing them again.
I just forward everything to Gmail OR email it to myself at Gmail, and label it well.
I use Google Side Bar Gadget it's not very advanced but easy and fast
I use UltraRecall [1] when I want to capture info from the blogs I read.
[1] http://www.kinook.com/UltraRecall/I quite like Remember The Milk [1]. I can have a tab for each project, an entry for each task and each task allows me to write notes.
Never really got into writing notes for long term - maybe I should start a blog!
[1] http://www.rememberthemilk.com/For getting my thoughts in order I use an outliner tool. On windows I currently use ecco pro [1]. It's very old software (most recent build is over a decade old), but it works really well for putting down structured text. There are some word macro's to easily export to word.
[1] http://en.wikipedia.org/wiki/Ecco_ProI use VoodooPad Pro on OS X, even when writing Windows code in a VM.
I've been a big fan of Evernote lately.
I personally use two methods, one being what JBB stated (paper notebook). The second is www.ubernote.com [1], which I have been working as a part of for the last two years. Ubernote has been coming along very quickly recently and gives me just about everything I need. Users of Microsoft OneNote or EverNote will conceptually understand the application, just about any user of an email client will understand the interface. I know I am an Ubernote evangelical, but working there, I have become pretty passionate about it. Using Ubernote, I can write notes in an editor similar to this one, share them with other people (normally coworkers or my girlfriend), add comments, clip web pages using the Firefox toolbar or bookmarklet, tag, search, etc. I use it to clip a lot of reference material and then look it back up later. Saves me from having to do a Google search for every nugget of information that took 20 minutes to find and I need to remember again.
Even though I write note taking software, I still can't fully give up my paper notebooks, for the common instances of:
Shane
www.ubernote.com [2]
[1] http://www.ubernote.comI have used several things that were not quite satisfactory, most recently Notepad++. I like how it opens lots of files left open. OneNote is captivating, and I have tried it, but it did not quite work.
I am looking forward to the released version of Win7 with its nice screen clip grabber and using that in conjunction with OneNote--that might just be the right thing for me.
Notes in MS Outlook 2007.
I'll throw my two cents in: I use Notepad++ and text files. Anything heavier (word, wordpad, onenote, etc.) is really too much for me. I like a clean and unobstructed window into the notes i'm writing without 200 features begging "use me! use me!". Only downside is that they (usually) get scattered all over my system and sometimes get deleted. Gotta fix that...
On Mac OS X, I've been extremely happy with Mori [1] for years. Unix commands, install guides, general notes, robust built-in search. And you can feel safe trying it out, exports your data and.. never actually forces you to register. :)
Mori is a digital notebook that makes it easy to record and organize your thoughts. Unlike the alternatives, Mori doesn’t box you into one way of thinking. Imagine a notepad that grows and grows. No matter how big it gets, you can search it in an instant, as if it’s all written on the back of your hand. Notebook, project manager, research assistant, and more. In other words, Mori lets you decide how you want to keep your notes, references, tasks, clippings, and more.
Lately I've started exploring Scrivener [2], "The biggest software advance for writers since the word processor." I've found it more motivating to maintain good notes as the tool itself is designed prepares your work for publication.
[1] http://apokalypsesoftware.com/products/moriScrivener is a word processor and project management tool created specifically for writers of long texts such as novels and research papers. It won't try to tell you how to write - it just makes all the tools you have scattered around your desk available in one application.
Never be afraid to make mistakes. Scrivener's "snapshot" feature makes it easy to return to an earlier version of your text. Before starting a major edit on a document, just take a snapshot, which stores the old version safely away. You can then call up old snapshots for reference, or restore an older version of the text if you decide you prefer it to the most recent revision.
I keep txt files for each day locally like '08-19-09.txt'.
I find it easier to just grep through them to find what I am looking for. Of course, projects etc. get their own files.
Yup.Google notebook is the one you should use.If you want to store as documents use google docs.The recent acrobat [1] from adobe looks quite sleek & glossy. However I haven;t explored it much.You can also use firefox addons such as evernote web clipper
[1] http://www.acrobat.comA sheet of paper....
Since there a lots of them I use college blocks. And I have a big stack of them in office.
I keep notes by project and projects by web site using a text editor. The text editor I use, kedit, allows me to link from these text documents to the source directly and it supports it's own set of snippets.
For snippets, I have a search page that I maintain on the local server. It helps both me and the other programmers.
I use delicious to bookmark important/interesting stuff and use "to do" lists on google desktop to make that things get done.
I use Nocs [1], which I actually wrote myself. It's a simple, Notepad-like app that uses Google Docs for storage. I use it for all kinds of TODOs and snippets. I like it because I can leave it open both at work and at home and my files are always in sync. All the files are stored as actual Google Docs documents, which means I can search and edit them both within the browser and in Nocs.
Very similar to Evernote though.
[1] http://nocs.googlecode.com/When all else fails, I use the 'journal' feature of Outlook
It's easy to add to and easy to find stuff using the timeline
I maintain a notebook to keep interesting code snippets,examples topic.....
Simply using pen and paper.
I use the Zoho Notebook www.zohonotebook.com
What I do is take notes on a whiteboard/paper/whatever everyday.
At the end of the day I use jotnot [1] to take an enhanced photo then save them to evernote [2].
Not perfect OCR searching with the paper(I have awful handwriting) but the whiteboards are pretty successful and I assume it will improve as evernote gets better.
[1] http://www.jotnot.com/iphone/Solution: (USB Flash Drive and Notepad++)
Notepad++ is a text editor that highlights many of the popular languages. It's also portable. I can run it off my USB flash drive which is on my key chain so it's with me all the time. I can organize my files in whatever way I need to and I have access to it even when I'm not connected to the internet.
It's not as glamorous as some of these other solutions, but it's a free solution that works for me. The only thing con is the fact that you've got to have a USB port for this solution, so that means no iPod Touch access. But how many times am I actually going to be coding on my iPod Touch? And if I happen to think of something I need to add to my notes and I don't have a computer or laptop around I can email it to myself and save it on my flash drive later.
I can't believe nobody uses Lotus Notes for this...
I'm stunned I tell you. Stunned. ;)
The combination of OneNote with a tablet PC is awesome! I was a bit of a skeptic at first. I used the trial version and then forgot about it. A year later I had an unruly collection of files, project related emails, notebooks and scraps of paper all scattered throughout my life. I went back to OneNote and all my problems went away. Some highlights:
It is SO worth the price. It allows you to get started on a project and avoid all that time spent deciding how to organize things.
I also lean towards TiddyWiki. Once you learn the markup, easy to keep your stuff interconnected.
But if you have the money and not anti-MS, then OneNote is the best, especially if you are using a Tablet or Wacom pad.
I'm using Mind Manager (mindjet.com) and a blank Moleskine. Moleskine for scribbling notes during a meeting and to track my tasks (no tool could give me the satisfying sensation of striking through a task with my pen ;) ) Mind Manager whenever I have to structure a lot of information and to keep track of the itsy bitsy details of my projects.
I use BasKet Note Pads [1] because it's very flexible. I collect a lot of notes in this application; not only code snippets but also ideas for possible birthday presents, quotations, ...
Unfortunately it's only available for KDE.
[1] http://basket.kde.org/index.phpI use a combination of Things [1] and Yojimbo [2]. Of course I sync them and also use .text files when I need a quicknote.
[1] http://www.culturedcode.com/things/I use OneNote 2007. I make sure that my files are backed up to a server and so available from anywhere that I need them. The ease of manipulating text within OneNote is great, and the best thing is that you aren't limited to linear text. You can add new paragraphs off to the side, or on top of another.
One of the tools I use is TodoList [1], both for actual to-do lists but also for code snippets, links and pretty much anything that can be kept in a form of a list.
Other tool is the already mentioned TiddlyWiki [2], although I'm only starting to use this. It's a very handy tool with built in search and tagging. Interesting variant of this tool is MPTW [3]. It has a bit different approach and provides an easy way to organize information.
For scribbling my thoughts on a current project however nothing beats paper and pencil.
[1] http://www.codeproject.com/KB/applications/todolist2.aspxPost-Its for reminders.
Notebooks for meeting notes.
Text files (Notepad/UltraEdit/Notepad++) for tasks and time tracking.
What a great question...
I use paper notebooks for most of my notes, which I try to keep sorted in binders or folders for future reference. Notes eventually evolve into project documentation, which usually fits in some kind of wiki-form. Classic Word-like documents are a no-no in my opinion.
Any structured e-paper-based approach failed for me. It's overly complicated and it's not portable after all. I do use, however, desktop post-it notes which are excellent for keeping code snippets, to-dos and such.
Another emacs fan here. I generally start most notes out in OrgMode. It provides a nice outline style that still allows for free form notes as well. It's also nice because as I identify things that need to be done I can mark them as TODO, schedule them and have them show up in an agenda type view of things to do. Additionally you can set a deadline on them as well which will then make the item show up earlier in the agenda with a count down of when it should be done. I am also a fan of EmacsMuse which among many other things is a personal wiki. There is also some tie in between the two packages I believe that will allow you to publish both org and muse files to html/xml/rss/pdf... Both also can make use of remember mode.
1) A good text editor with a hierarchical outliner mode (e.g. Emacs + org-mode, or vimoutliner). why? Because programming involves drilling down into increasingly precise statements of the original task.
2) Your revision control system of choice and local checkout of the source code why? Because the most precise definition of the task usually is code; leaves fall off the Todo Tree and into the tree of source code.
Text files, a GNU userland and revision control go together like coffee, milk and sugar, and this arrangement gives you the flexibility and freedom to adopt new tools as you choose.
A combination of things: Google Notebook (with an add-on for Firefox), Google Reader with a "Note in Reader" button for Firefox, Screwturn Wiki, Notepad and a physical notepad of course :)
A legal pad and a whiteboard.
My personal notes tend to go down on paper... whatever paper is lying around at the time.
We use Confluence (wiki) where I work: http://www.atlassian.com/software/confluence/
You have to pay for this one but there are free ones out there as others have mentioned.
we used instiki int he past: http://www.instiki.org/show/HomePage
it was pretty nice and free.
On wikis, I like Daisy [1]. It's like a wiki on steroids, and I find it great for documentation, brainstorming and keeping notes. It's also easy to share the information with other devs too.
[1] http://cocoondev.org/daisy/Like previous posters, I also use TiddlyWiki for my notetaking needs. I will expound on why, from a programmer point of view.
First, note that "tiddler" is a note object in TiddlyWiki parlance.
Each medium to large project gets a TiddlyWiki file all to its own. The default tiddlers are an overall project overview, and a "master" class that links to other objects. Each object has notes about that specific class or object, things that work or don't work, etc. Most of this ends up being in classes, but as we all know, there's additional notes we take while writing code, including external libraries and supporting programs.
I used tiddlywiki. It was easy to use and generally fits the bill for my needs. The tagging works well.
I suppose, however, that having an indexed drive would work just as well w/out having the need to use a special tool.
I use Wikis as much as possible. I find that it helps for a number of reasons:
I find a lot of people waste too much time on formatting in a Wiki environment and not enough time on just taking the notes. For this reason, I've found Wikit (http://www.equi4.com/starkit/wikit.html) to be the best Wiki software. It's easy to setup and run (has a built in webserver), and has enough formatting options to keep me satisfied, but not so many that I get overwhelmed.
I use The Journal found at http://www.davidrm.com/thejournal/
It's a great tool that use for keep scratch notes, my daily journal entries in date format. I keep the sources for connecting to my blog, which is nice to have an offline archive. I keep general programming notes and code snippets in a Loose Leaf format organized by language. I keep a Bug/Error Listing for those @#($&@#(*$ they didn't document THAT moments and the appropriate workarounds. There are customizable templates you can create to save time on repetitious entries. For me these are the built in headers and bullets for my revision notes, daily time logs and workout notes.
Generally I keep my other writing projects, including my novel in here too. The program is very flexible and just plain works well for how I function. I also love how I can install it on my USB Jump Drive, just like my PIM/Business mail program and keep it with me regardless of what computers/machines I am using.
To those whom have mentioned mindmaps, I use those for brainstorming primarily, but that for me needs to be a paper/whiteboard exercise. There is something about the process of creating mindmaps for me that needs to remain somewhat organic. Generally after I complete a map I will either post it on my cork board or scan it/draw it to include in whatever the map was made for. There are a few good programs out there for creating them, particularly MindJets MindManager [1], but I only did the trial on it and can't say for long term how useful it is.
[1] http://www.mindjet.com/I keep all notes together with the source management, using trac [1]
By recording links to tickets and changeset together, it makes an easy way to keep discussions of individual issues together, track the code that went along with it, and the wiki is useful for documentation.
[1] http://trac.edgewall.org/Microsoft OneNote is very handy, particular as it can be used disconnected, which is when a lot of thoughts and ideas come to me (airplanes etc.). It's also quite good for sharing notes and doing real time collaboration on ideas and notes, which a must have feature for me that a lot of web-based systems don't have.
I have a little 4x6" notebook in which I write down notes and ideas. It's the cheapest notebook Staples sells that I can fit in my pocket, not one of those fancy moleskine ones. That way, I'm free to fill it up with crap and replace it ASAP.
When I solve a problem for a specific project and writing the code isn't good enough to document it, I just write comments. If comments aren't appropriate, most of my repos end up with a misc
directory that contains random notes, OmniOutliner checklists, example scripts, and aborted attempts at great ideas.
If my idea is about something more general, but isn't general enough to turn into a released library (which I do at the drop of a hat), I put it in my Rubric [1] and that's that.
I like wikis, but they're generally just a bit too much work for me to use for keeping notes. That has to be really, really easy to do. Finally, sometimes I use Jott [2] to dictate things to myself via Hiveminder [3] so I can put them into the right file later, when I'm out walking.
[1] http://rjbs.manxome.org/rubric/For the Mac Centric ::: I use Yojimbo from Bare Bones Software to store and loosely categorize PDF's (most academic papers Safari Web Page Archives from various developer sites. For a while I tried structuring them all as giant outlines in Notebook from Circus Ponies Software, but Yojimbo's fast and elegant search function obviated the need to spend so much time trying to pre-organize things.
For working code, I just use BBEdit to manage temporary clippings of live code fragments.
But nothing can match Tinderbox with its powerful background Agents from Eastgate Systems (Full Disclosure: I am a friend of its developer) for building and maintaining complex hypertext documents and applying a generative programming approach to building complex mix-development-language web projects.
On the road, I use a solid state voice recorder or OCR Pen to capture notes which I sometimes transfer to Post Its that I leave in plain sight to so they can jog my memory at critical points in time.
Depending on the size of the project, I'll use a notepad or sticky pad. If I'm saving code, I'll usually create a text file in the projects folder and then make a reference to the file in my written notes.
I also use a simple application called Taskpaper [1] which allows you to manage task lists and outlines by writing lists like you normally would on paper. I'll usually create a new Taskpaper file for every project and keep the file on my desktop until the project is complete.
When working with a team, I use Writeboards [2] and basic messages in Basecamp [3] - great for sharing and collaborating with others.
[1] http://hogbaysoftware.com/products/taskpaperI blog the notes.
Depending on where I am, any of OneNote, EverNote or Gmail.
*Note applications are short-term memory. Gmail is long-term memory.
I like to use a blog for revelations that are generally useful for other projects as well, stuff like how to use a particular tool really effectively to solve some recurring problem.
For things that have to get done ASAP I use sticky notes on my desk. One note per one item and chuck 'em in the bin when I'm done.
If an implementation solution needs to be defended, the justification goes in the code as comments. This is also true of minor refactoring TODOs, because it's so easy to just grep for "TODO". Larger tasks go in issue trackers, which is also true of my private projects: I tend to use ditz [1].
The rest goes in wikis, preferably.
[1] http://ditz.rubyforge.orgWell I'm using XEmacs nearly all day long, so it's "natural" to use it for everything. The mode to keep on snippets, notices etc is named planner. Which is a wiki like stuff. The stuff is simply kept in text files and that's the unbeatable....
Regards Friedrich
Depending on what i'm doing i use:
It would seem that a combination of a Tiddlywiki [1] file and a DropBox [2] would be a good solution. It would have the network usefulness of Google Notes with the plus of being editable/accessible when disconnected from the local Dropbox.
[1] http://www.tiddlywiki.com/Mac specific answer: I use VoodooPad [1] extensively for keeping snippets, notes, and so forth. Aside from being an excellent hypertext editor, its single biggest benefit to me is the ability to run scripts from within one of the pages and get the results immediately.
The resulting pads become an active tool as well as information repository that are just invaluable.
[1] http://flyingmeat.com/voodoopad/I have used TadaLists with relative success - good for sharing with others for cross-person lists. I typically keep only certain types of lists (i.e. application ideas, technical checklists for an eclipse install, remaining items for small apps, etc.). I have found some bugs with the re-ordering, but other than that, it's really simple and quick. Certainly there are better tools out there targeted at developers, but this works for me (for now). One major benefit is that it follows me - I can't misplace it or forget it at home, and can access anywhere I have Internet, which whenever I need it, is practically always there.
Previously, I've used notebooks with limited success (lose them), and the whiteboard on my desk (out of date too quickly).
I use Daisy WIKI / CMS (http://cocoondev.org/daisy/index.html) to keep my developer notes. The reasons are rather simple:
That is why I use Daisy, in a nutshell. As you can tell, I rather like it! :)
todo lists: my '@Work' context for Remember the milk [1]
most things else: I keep things where I need them. Comments inside my code. postits on my desk, and if I feel something's worth sharing I might post it to the internal wiki my company hosts.
[1] http://www.rememberthemilk.comI use Emacs, along with planner mode and remember mode. Planner mode is a TODO list software, with PIM features, and it sits on top of Muse-mode, which is basically wiki software for emacs.
At the core of planner is the daily page. IT is a new wiki page that is created every day. I keep my daily journal in these daily pages. it also stores daily appointments, and tasks.
If I am starting up a new project, I will create a new wiki page for it. At this point, I can start adding tasks right away with planner mode, and linking them to daily pages (for their due dates). Additionally, you can create wikilinks to other projects (for super-projects or sub-projects.) or even links to files and file positions in the filesystem.
So notes regarding a particular project would go into that projects page. Checklists would become todo items. Final solutions would also belong in there. Code snippets exist as links to that particular file, plus some notes to go along with it.
Everything is in one nice and central place in my IDE. It's bliss for me.
After trying a bunch of things, I've taken to just carrying a small notebook with me at all times and note down everything I think of and when I really need to take code snippets, some of them go to google notebook in the folders or into tomboy... if I'm using windows and it's for some sort of paper, OneNote all the way!
Some time ago, I adopded a simple but very efficient workflow that handles/comprehend also note-taking:
In this way, every note I take is related to a specific development workflow and is avaiable for further analisys. Since the BugTracker.NET [8] web site is exposed to the internet, I can search/consult/interact with this knowledge just navigating into it
[1] http://en.wikipedia.org/wiki/Extreme_ProgrammingTo save (and share) your links use Diigo (http://www.diigo.com/). You can highlite text, pictures,...
Anything that's handy and is available when I want to scribble -
be it my notepad, notebook, a file on PC, sticky notes, even wall :) .... whatever that helps jot down your thoughts without breaking it due to non availability of any thing in particular..
whats the point looking for a particular medium, which by the time you get, entire thought process is gone.
The only thing to care about, what ever you used, should be available for back reference !
I make notes, lists, todos in text format, and either save these in a "doc" folder in the project folder, or right in the project folder itself if there are only one or two files. If I am using version control these get checked in with the project.
I typically use whatever basic text editor/reader comes with the OS that I am using at a particular moment: Mac OS TeachText [1]/SimpleText, OS X TextEdit [2], Microsoft WordPad [3] and Notepad [4], the cat [5] command in BSD/Linux, Nedit [6], etc...
[1] http://en.wikipedia.org/wiki/TeachTextI use my own product which I built with this in mind: TheKBase [1]. It's multiple hierarchical, not unlike your brain.
It reads and writes pure XML and is very lightweight (but needs .Net 2.0 or better) and user-supported (i.e., free). I cannot imagine why people would use physical notebooks or notepad.exe when there are options like this around.
[1] http://www.thekbase.comThe best "sticky-notes" app I have ever used (very lightweight and small notes with no window widgets wasting screen real-estate): AtNotes [1]. Unfortunately, this application has been discontinued but you can still download it and use it. When I get my first MacBook, I will likely make use of the Desktop Widget feature for this same purpose, but on Windows: AtNotes rocks.
[1] http://atnotes.free.fr/Over the years I have tried so many tools myself, I don't even know remember what I tried. I know that Google Notebook was among them, wikis (serveral) as well, Basecamp [1], Rememberthemilk [2], etc..
One important thing that I learned in the process was, that whatever tool I use, failure always came when I started slacking off. For example, I did not stick to my plan [using X] and that is what created F'ups down the road. It didn't really matter what I used, be it a wiki, or a moleskine or something else.
I am currently using the todo-list feature on my e71. And I have for the past year or so always used my phones capabilities to keep track of my tasks. I enter pretty much everything in there and set a due date etc.. This has helped me a lot. I syncronize my phone with an online calendar which I also update with whatever I have to do. This is as far as personal organization.
For keeping records on stuff I build and solutions to common problems, I currently employ my own PBWiki [3] account.
What I generally like about the wiki approach is that the structure is very flexible. I can enter information, and re-organize it later on. It also allows me to restructure information when I think I need to. I usually organize my entered data weekly.
The only downside to a wiki is that you need Internet, and that you need to be dedicated about entering information later when there is no Internet currently. It's something I constantly struggle with. ;) The phone and wifi really help, but in the end it's up to me.
[1] http://basecamphq.com/In my head and in the code with comments...
These days I use plain text files (I'll leave the vi vs. emacs debates for others). I have a dropbox account so the files get synched to each of my machines automagicly. Dropbox does revision tracking so I have at least a poor man version control on them. I am doing the same for todo lists as well.
I use a pen and paper, but the other day I found what I want for Christmas [1].
[1] http://www.livescribe.com/i made a ratty little program i call InfoCache. it's written in delphi and uses the MS Access engine. it also uses the (somewhat frail) access replication. it presently has about 8000 entries in it. pretty cool. it's searchable & can contain UU Encoded binary files as well.
i should put the program itself on sourceforge but frankly it's not hard to write one yourself.
For a text file that I need to open on multiple computers, I use Drop Box [1]. It magically syncs the file so I can open it on multiple computers. The get an auto reloading editor like MS Dev Studio or Ultra-edit. Now the file is always up to date on all your computers!
[1] http://getdropbox.comWe use Mindtouch's Deki Wiki [1] at work. They have a ready for use VM image that can be running in your desktop with a VMWare player or pluggeg into a VM server. Minimal setup required this way. The VM runs on debian, but you can download the source-code (GPL v2) to setup yourself. Requires Mono/.NET
All my work-related notes are placed in the wiki. Most of them are made public so others can benefit. Since we use a pretty old language, not used by many other companies, this helps. Plus all the (very old) paper guides for the language were uploaded to the wiki.
[1] http://www.mindtouch.comI can't recommend FreeMind highly enough.
I use Yojimbo [1]. It works well for keeping not just text but images, PDF documents, web sites (links and full archives), etc.
I have collections for common things that are not tied to any single project (syntax cheat sheets, interface guidelines, etc.). I create a separate collection for each specific project where I put things like web research, code snippets, requirements docs, and engineering notes. Yojimbo allows the same item to be in more than one collection so it's easy to aggregate project-specific and general-but-related information in one place.
Yojimbo syncs all its information (via MobileMe) to all of my machines so I have the data wherever I am. But unlike web-only solutions the information is actually stored locally on each machine. That means I can work offline (I usually commute by train) and everything syncs up the next time I connect.
[1] http://www.barebones.com/products/yojimbo/I use Org-mode in GNU Emacs. It's pure text: you can easily backup your notes, or handle them via a versioning system. You can also export them to various formats, with code highlighting. Very nice.
I use MediaWiki for keeping large notes (i.e., diagrams, specs). For short-lived snippets, I use this alias so that I can just type "wiki" at the command line:
alias wiki="pushd .; cd /home/simoncpu/notes; vim wiki; popd"
For general observations and "what have I learned today" type things, I second the notion of using a blog. If nothing else, it'll be something interesting to go back to.
For code snippets, I'm quite enamored of basKet on linux.
I use a combination of physical notebooks, Emacs modes and LaTeX (just so that I do not lose my typesetting skills - they're invaluable.)
Paper and pen!
During the thinking process a sheet of paper is great for me - I can sketck, draw, mark, put number while debugging, etc. This is for temporary memos, however. For more general and long-term information I use docs and/or spreadsheets, depending on the information itself.
For most important, mid-duration memos I like to use source files and simple text files - todos, marks for needing optimization / further reviewing - all fit very well among the code, since this keeps them well up to date.
Also sometimes when I am really into something and I have to interrupt - I put a small summary, in the current source file, of what the current state is and what are immediate steps that must be taken to continue - this helps me to restart very fast when back.
Tinderbox for everything. Links, outlines, maps, agents, search, export, you name it. Can be as simple or complex as you want. I live there.
I've been using One Note. Its ok. Have a different page for every month and throughout the day I document what i've worked on.
I use Trac [1] tickets for keeping track of things to do, and Trac's wiki for formal notes and documentation. During a planning/design/brainstorming phase, I'll use pen-and-paper, and if I'm trying to work out a complex problem that I can't keep all in my head at once, I turn to the large whiteboard hung up next to my desk. Each is perfect for certain purposes, and I couldn't do without any of them. Especially Trac. Nothing would ever get done around here without Trac!
I also frequently rely on Gmail and it's search capabilities; if I get important information via email, I never need to transfer it anywhere else to keep track of it, I just leave it in my mailbox to be searched for when it's needed.
[1] http://trac.edgewall.org/I think a blog is a good place to put you ideas. If google indexes your site, then you can search for previous answers that you used.
A notebook, and plain-text documents edited with VIm, generally. I do use google for links and notes in the style of "remember this!"
I use a notebook. I am a visual guy so I like to draw diagrams of workflows, mockups, schemas and so on, so computer based tools are too clumsy compared to a pen and paper and sitting back on the sofa. A tablet PC is not an adequate replacement either. You can't beat the feel of paper, the high DPI, the instance feedback, etc.
I also have a personal SVN repository of project code and snippets.
I would also set up a personal Wiki for when I am having to write or document things, often snippet-based best practice notes.
I use a ToDo list manager application for listing tasks I need to do. The one in Outlook is not suitable in any manner, you need one that can handle task hierarchies - an outliner basically. OmniOutliner on the Mac is great, and OmniGraffle is great for drawing up those notebook scribbles later on.
There are applications that can be used for authors when writing books, and I think there is room for a tool that does the same for programmers.
I use a bound A4 Artists Diary (unruled, high GSM paper) which I write mind maps, scribbles and all sorts of unstructured goodness on.
I rarely seem to need to review these notes ... it just helps to write them down.
We use NoteScraps [1] at my office. It was developed internally to solve this problem. It was designed to be simple and look great.
[1] http://www.notescraps.com/I'm a big fan of a notebook or even just a pad of paper... but for a while now I have been doing a lot of note taking in OneNote. It's all about being able to search quickly.
Others have mentioned sharing on a network which can also prove helpful in some applications. Also I find it's simple ability to capture screen prints, or even print outs from a web browser or other application to be really helpful.
I like to use one of those bright yellow note pads. I have always preferred to write my notes/ideas out by hand rather than use a word processing or note taking software. It feels like I am able to explore ideas easier on a note pad because I can make quick sketches of ideas, connect two separate thoughts using arrows, or just doodle.
I think the notepad gives me the ability to have a uninterrupted stream of thought. If I am typing I easily get distracted by an IM message, go to a website, or what ever. I seem to be more distracted when I try to write notes or ideas using the computer.
Maybe I am old fashioned. I don't know.
I used to keep notebooks and always lose or misplace. Now-a-days, I just post solutions on my website.
I have currently begun using sharepoint. More because VS Team Foundation automatically creates a sharepoint site for each project created. This, so far has been an excellent place to put documents about the project (Design docs, 3rd party utility docs etc) as well as forum like dicussion boards etc.
Now, that being said, that is project / team based. We also have a division level sharepoint site where we do much the same.
Personally (Outside of the company) I have tried onenote but I will certainly checkout some of the suggestions made here.
If you have a MSDN License - use OneNote for dragging & Dropping URL links, email, documents, etc - its ability to rearrange existing notes is awesom
I also agree with the suggestions of TiddlyWiki and ScrewTurn Wiki - I love to use wikis for personal and group collaborations and brainstorming
I use the Firefox Extension Quicknote [1] for small notes.
[1] https://addons.mozilla.org/en-US/firefox/addon/46I use the fitnesse [1] wiki to keep notes on projects at home. One feature it has that I've not seen in other wikis is that it is hierarchical, which means that you can have short names for pages that don't clash with pages with the same name in different branches.
[1] http://www.fitnesse.org/I like and use OneNote quite a bit, but have recently fallen off the wagon and returned to paper and pencil. (I just like them!)
I miss InfoDepot (an old Classic Mac application) for this sort of thing. In fact, I'd still use it (I have several copies; former employee of the company which made it -- before my programming days, mind you) except that printing from an emulator is nigh-impossible. If you have a recent Mac available, OmniOutliner [1] is very similar. (I last used version 2, which is still quite sufficient for my needs. Great app.) Both of these products work on the concept of organizing your data as outlines with multiple columns -- think outline meets Excel, and you get the drift pretty quickly.
Would that there was a Windows app similar to OmniOutliner/InfoDepot -- that's the ideal note-taking/organization app for me. I've often toyed with the idea of making one ...
[1] http://www.omnigroup.com/applications/omnioutliner/Evernote for the win - being able to synch up across multiple computers and on multiple operating systems AND on my iphone makes it the best app for me. Just take a few minutes to learn the shortcut keys and you'll be good to go.
One great tool for jotting down notes is Tomboy Notes. It comes preinstalled with Suse Linux. It is easy to use and it support cross linking. Having said that pencil and paper is still more natural than any computer based solution.
Check Off on the Mac is cool, hides away nicely and pops out when you need it. For any important calendar events / deadlines I use iCal.
may be it just fetish, but I use my molesckine :)
Personally, I've found a Wiki in general to be the best. Especially if I can get to if from anywhere. Specifically, I've grown quite fond of DekiWiki [1]. It's open source, written strangely in PHP and C#, and runs under Mono on just about any OS available (Linux, Windoze, Mac OS X or otherwise).
Piko
[1] http://www.MindTouch.comAs indicated by the amount of replies here, there are many options. Which you choose depends on your requirements, which might include:
The main advantages that paper have over any digital options are in drawing images, as well as fast text entry -- it is often much easier to reach for a notebook than to find a program on the computer, if only because usually, my desk is a lot bigger than my monitor, and is used ony to store paper things (and coffee mugs, off course).
In the digital realm, simple text files with a versioning tool (subversion or darcs) seem to satisfy all the requirements very well, so that is what I use whenever I just want to jot down text (I type a lot faster than I can write). Fast text entry is my most important issue though -- I type a lot more notes than I ever re-read. An absolute requirement for me is therefore that I can just summon an empty note with a single keystroke from any context.
I also use MediaWiki, personally as well as in team projects.
I use Google Notepad
I have started using CardMeeting [1] to keep track of my different tasks. Great if you want to share notes within a team as well.
[1] http://www.cardmeeting.comNotes on the Dashboard (MacOSX)
I make notes on a white board in my office, on my own and when other team members are part of the discussion.
I then take a digital photograph with my mobile phone.
These images are then sorted and listed in my SDF (Software Development File).
I also use a physical notebook. I find myself more productive (when thinking) if I am not behind a keyboard.
I use a small home-made database, driven by a simple search box.
For long term notes use a wiki. We use Dokuwiki [1].
We also use a bug tracking or change request system like Mantis [2]. Here you can handle requests for change in code. Developers and requesters can vote on and discuss changes and bugs. This way you keep a history of the discussion which is also very useful.
An interesting approach I found some time ago is to establish a local IRC, let everybody discuss their problems, log all conversation and make the log searchable. This way, someone on vacation can spend the first day to read the conversations and get on track with what happened the weeks they were away.
[1] http://www.dokuwiki.org/dokuwikiI tend to use a simple text file organized in folders what convey what the notes are about..for example a GWT folder for google web toolkit notes
emacs modes like org or planner.
I use "the Brain" from http://www.thebrain.com/ since it works a Mac Os, Linux, and Windows.
Personally, I use Notepad++ for long term notes and Notepad for short term cut and paste items. Everything else we keep in our CM system (i.e. design details/notes, requirements, source code). At my previous job, and for freelance work I've used Google Docs & Spreadsheets just so I could share the notes out and access them anywhere.
dotProject is Open Source Project and Task Management Tool who let you record and/or share milestones, trouble tickets, notes, etc.
I highly recommend it.
I've found that using a wiki is a great way of doing things, but if you can get everyone in the same room, there's nothing better than an active tape recorder, a big whiteboard, and a camera for capturing the state of the whiteboard as you work together. Even if you're working solo, the whiteboard and camera can be very useful as a way of tracking how your mind flows while working on a project.
Also useful, of course, is the tree of text files, especially when kept in a source repository (for the always helpful revisioning that occurs), but a wiki is just as good, if not better for this.
Dave Winer's OPML outliner tool is simple and handy.
PMWiki for notes. For todo items and reminder, Tracks http://www.rousette.org.uk/projects/ or Bitnami for easy installation package of it.http://bitnami.org/stack/tracks. Lots of good ideas in this thread.
I use this
I use Evernote [1]. It's the best incarnation of a Memex [2] to date.
[1] http://www.evernote.comI just use a text editor and store all my snippets in a set of folders organised by language. I put the code with a brief description in the file of what it's for and then title the document with what it's an example of and use that title to name the file. Once this is done, you have a question and an answer that can be searched (Google Desktop?) or browsed through the file system to get at an answer of how to do something. I try to apply a bit of a "refactoring" methodology, by only writing something up if I'm using it for the third time. That way, I don't have to scrabble for an answer again and I know the code is likely to be reused again, so it's worth my time to document it.
A highly ranked answer by JBB mentioned note books. I agree with that person, something in my brain clicks in to action when I write something down, which is not happening when I type in to a computer. It some how solidifies the information in my brain. There is one draw back to notebooks. Search, retrieval and sharing of information aren't so easy, which I guess is why stackoverflow.com and other sites are about.
I use emacs org-mode together with remember. Under org-mode I use a GTD file with topics and tasks and a task-topic to gather tasks yet to be distributed over topics (or projects). Remember allows one to quickly add new tasks (they go into the task-topic at the top of the file) and notes (they go into a notes file, but can carry a reference to a topic (project).
The GTD file, the notes file and an archive of completed tasks are all kept under Git version control. At work, at the end of the day I push these files to Github. At home I can pull them out of Github; add stuff, commit the files and push them to Github.
Simple text files organize notes and projects and can be reached from anywhere.
I blog it.
For small notes, I use KNotes (provided with KDE). And for more important notes, I send an email to myself :-)
Filofax, so you can add new pages when you want to expand a section, and avoid that logbook problem of having different projects all mixed up.
Notes? I don't need no steenkn' notes! .. I use eidetic memory...
SnagIt, OneNote and Evernote
I use a combination of OneNote, Blogging and good ol' pencil and paper.
Evernote rocks!
I've used 3m's Post-it Lite [1] to great success for quick notes I don't want to lose. I always end up losing physical post it notes as they drop off the monitor when people walk past my desk (open plan office). They also make copy and paste in to/out of emails much easier ;-)
[1] http://www.download.com/Post-it-Software-Notes-Lite/3000-2351_4-10060027.htmlI use EditPad Lite (like notepad) for quick how-to steps for stuff I know I'll need to do in the future and will forget.
I use physical 1 subject notebooks to record my daily activities.
For changes to code that is in-production I identify my changes with date, name, and summary.
I have various "cheat sheets" like reg ex, css, html quick references printed and pinned to my cube wall. A few Other things I've printed, but mostly I just bookmark my stuff in IE with a well define folder structure. I found if I end up keeping too many notes in a binder you can't find anything anyhow.
Keeper [1] is a note taking application, more intended for use by writers but has many of the features the other note applications mentioned here have. Notes are quick to add (ctrl + n) and there are a variety of note types and brainstorming features. Keyword tagging and search available as well.
[1] http://yourothermind.com/Keeper/keeperdetails.htmI used to use office's note for my work. It's full of tips related to work. I then move everything to Google Note since I can search and use it anywhere. The drawback is that I can't narrow my search in certain notebook. It would be great to try other tools.
I also like to use physical notebook to draw out ideas and use UltraEdit when I need to look at some one time data.
Simple text file on a remote server.
I have a couple of text files... One for my one-liners & PERL inside vim. One for sysadmin help when I did that job, how to "config a scsi tape drive" use the "dd" command to format a floppy, etc. And I have a good sized directory that includes everything from one use shell scripts, to perl stuff cut-n-hacked out of the man page examples saved off as things like PERL_Function_Test.pl, all the way up to some of my medium sized data cruncher and stat generator programs. This way, I can grep stuff out of them as needed. And I'm a little on the lazy side, I have aliases that grep stuff out of my help files. And if anyone asks me a question I don't have time to answer, I tell them to look at my alias "gp" which does "grep *! ~/hints/perl_one_liners.txt"
I use a method very similar to JBB's, only I use small three ring binders instead of notebooks, because this way I can better organize the pages, and use all kinds of paper (blank for sketches, ruled for normal writing, etc.)
I also have an adjustable hole puncher so I can put anything in there (printings, magazine clippings).
Fortunately, the size of the binder pages is half letter size, so I can print anything without having to load special paper into the printer, and I just cut it afterwards.
I tried blogs, wikis, and all sorts of more advanced tools, but none has worked better than this one. Although I'm thinking of improving it by scanning the pages and uploading them to a blog or some other web tool so I can look at them anytime.
Since I run an Apache server anyway for personal use I just use Media Wiki. I make weekly backups of the database so I can reinstall it or transfer it to a different machine if necessary. I like using Wiki because if someone asks for help I can just give them the URL and they can look through my notes with out having to borrow a notebook.
Text files in ~/lib/docs
I use Evernote [1] to keep all my code snippets, blog exerts and links. Evernote has the following features that made it great for my everyday note taking:
I use Mindtouch DekiWiki [1] for all my programming and system management notes. By restoring backups of the (company) Wiki to a Virtual Machine on my MacBook, I can take my development notes anywhere.
[1] http://wiki.mindtouch.com/If it is something I know i am going to reference a lot and want to reference easily, i use a wiki.
If its something quick, notepad in windows or a pen/notebook.
I use Evernote. I love the fact that I can get to my notes whether I on the Internet or not. Also, the text in graphics are searchable. Comes in handy for a photo of a Whiteboard.
I have been using a A4 sheet of white board paper and thin white board pens. Then I will take a picture of an important note.
If they are documentation type notes, I'll use a text file or Word doc in the project folder so it's available to all via source control. Personal notes, usually just a text file or a physical notepad, although I'm looking at Evernote and Onenote after reasing these responses.
I use a mix. I hate using notebooks, because I am prone to losing them and if I do then I am a bit screwed.  I have a smartphone, but I type very slow on them. So what do I do? I mainly go with paper and type it up later or just try to remember and email it later.
Little "composition" notebook.
I use a mixture of small spiral notepads, Google Notebook, Evernote, and post-its. I'm gravitating more and more towards Evernote however.
Depends on the project, but I sometimes use Tinderbox [1] for planning notes.
[1] http://www.eastgate.com/Tinderbox/I love Yojimbo on OS X
I'm becoming scared that this post is misleading developers to use physical notebooks. Note that the majority of people prefer digital solutions, they just aren't in consensus for the type of software. There is evidently less competition among notebooks than among software products.
This answer is a community wiki. Please edit it to reflect the best resources revealed by this question.
MS onenote 2007 works like a charm for me.
The OCR from screenshots as well as the capability to have unstructured thoughts presented in a structured way, automatic backups as well as saving and a bootstraper with amazingly small footprint does it for me.
A combinaison of a physical notepad and the windows notepad. I use windows notepad when I want to be able to copy/paste my notes. Other worthy notes are in my physical notepad which I can bring with me everywhere I go.
I've been pretty successful with:
I've tried Evernote, OneNote, etc but I always fear the file format... Wiki on a Stick is a single html file.
 I've got an intro html page that leads into multiple Wiki on a Stick instance. The intro page is a gasp frameset so that I've always got navigation to at least the top levels of my other sites. I have one wiki for gaming notes, one wiki for development reference, one wiki for recipes, one wiki for my blogging/writing notes, etc. (My work wiki is organized similarly by client and/or project.) I find this a minimal amount of work for staying away from specific file formats and staying with open html/javascript.
This is a great thread and I will certainly be checking out some of these alternatives.
The solution I was using was to find a notetaker that consolidates to just one flat file and then use something like FolderShare or DropBox to sync it with my home, office, and laptop PCs.
The downside to this is that many of these single file things (like TiddlyWiki) don't scale very well over time. After 2 years, TiddlyWiki became so bloated and slow that I gave up the notetaking concept all together.
Now I actually use gasp Outlook tasks.
Microsoft OneNote stored in the Solution and bound to source control.
Also, I find it the easiest to use a physical notebook. I carry it around everywhere and add ideas as I go throughout my day. Then at the end of the day, I usually go on Google Docs and organize them on a document.
ToDo comments in code and then I use the things application for tasks lists.... http://www.culturedcode.com/things/
A plain text file or a dead-tree notebook. I normally take notes in the heat of the moment, so I prefer to keep it simple.
Everytime I tried something fancier (like Tomboy on GNOME), while it was nice at first, failed the purpose for me. It normally breaks my workflow, thus I stick to the simple text files.
For keeping references handy I've been using an Excel file with multiple worksheets, e.g. Web, Db, C#, C++. Each worksheet has the following columns:
Subject | Title | Description | Source Link | Last Updated
I post useful/interesting code on my blog for me and others to reference later. Other than that I use Gmail (which has proven to be very useful) and also traditional Pen & Paper.
I use MS Word file to write notes and upload it my Yahoo,Gmail(backup) Inbox..You can make seperate folders for your notes in your EMail website....The uploading thing is done every 4-6 months to save it from any hard drive failure...its a bit tedious but thats the way i am...simplicity has also been my friend...
Notepad.exe
I use the small vista gadget that provides you post its until I don't need it, in case I need it back, just send a self email and keep it stared or followed up
As a simple solution, i use google desktop + gadget to take notes + calendar. Good thing about google desktop is that you can use a lot of your "google hacks" techniques to filter your search plus specific techniques for your desktop (http://desktop.google.com/features.html#advancedsearch). To fast notes about debugging, values, fields names, i use to take a note with a pen + notebook. Just avoid to write there your passwords :-)
The back side of meeting agenda and minutes that my company insists on printing out. And bulldog clips.
I just use Livejournal [1]. It's not fancy, but supports tags and is always available.
[1] http://www.livejournal.com/I drift between EverNote and Backpack, tending to keep everything for one particular ticket or project in a backpack note and then archiving it to EverNote for sort of project-based stuff. EverNote for one-off things and storing all manner of information. I also flirt with OrgMode frequently.
link text [1]I've been keeping a solution log as suggested in Practices of an Agile Developer [2] for a couple years now. I keep them in Yojimbo (Mac OS X specific) as rich text notes. The program isn't the important part, though. It's getting into the habit of keeping track of the solution to every problem you spend more than a few minutes trying to figure out. It's invaluable to have it as a reference when you've come across it again and can't for the life of you remember what the solution was.
[1] http://www.barebones.com/products/Yojimbo/If I am on the road, nothing beats dead trees. I normally carry around a small, hard covered paper notebook (to survive the rigours of my backpack). It doesnt ever run out of power, wont get checked by airport staff and boot up is immediate. When I get home I transcribe it into a personal wiki. The transcribing process allows me to reflect on what I wrote and add to it or discard information as required.
Physical notebooks. They don't need batteries and always work. Anything I jot down there for ideas (usually done as drawings either architectural or UI) become spikes, real code, or blog posts. I keep as few notes as possible and let the software be my notepad.
There's a One click install of MediaWiki avaiable on my hosting service. I use that when I want to save notes.
TextPad [1]
I date and time stamp my entries into a different text file for each project, and keep a running dialog of my thoughts, progress, etc.
It also makes an excellent editor when I want to look at some code without firing up the IDE, as it has built-in syntax highlighting. If it doesn't have syntax highlighting for the language I'm using, I can download the appropriate Document Class from their website, or create my own.
[1] http://textpad.com/I use the lined yellow legal pads for my mind maps and simple notes, but for more important stuff that needs to be kept forever I use a small C# app that I developed just for this purpose with built in search for speed and efficiency.
I have been programming for nearly 10 years now and I have no magic toolbox of code to show for it.
My rationale is that what I wrote to solve one problem only solves that particular case and probably just barely does so. Think about it. If you're writing code it means that you either A) didn't look for an existing solution in the operating environment you're running under, or B) the need isn't general enough to warrant inclusion in the library. In either case, what makes you think your code is the answer to this class of problem every time you encounter it. Odds are, it's not. Your solution isn't as reusable as you think.
Besides, how could you ever justify jumping to a new language if requires you to leave your comfort zone? ;)
Microsoft One Note is an amazing and underrated tool, majority of developers have it installed with office and never even open it... I can't live without it.
I have a project called "home" that I keep in Subversion and check out to every machine I'm on. In that project is a directory called "lab" and any time I have to work on a scratch program or write a 2-200 line program to do something, I do it in lab, and add it to the repo. The accumulated scraps have saved me more than once, and having it on every machine, always updated via Subversion, means that I never find myself saying "Damn, it's on this machine..."
http://xoa.petdance.com/How_to:_Keep_your_home_directory_in_Subversion
Also, I have a wiki that I keep notes in if I think the notes are interesting to anyone else. See above.
I've been using Google Docs for notes so I can have them available on all my machines. Paradoxically though I'm finding that as Google adds more word processor features Docs becomes less useful for me as a note-taking app. For example, there are now red squiggles for misspellings that I can't seem to turn off. I'm thinking about switching to Word or some other file-based solution and syncing with Live Mesh.
For code snippets that I find online I just bookmark them in Delicious. My own code is usually under source control. I've used Live Mesh or Groove to share small demo projects across machines.
At work I use MS OneNote, as it is extremely easy to use, you don't have to remember strange syntax or shortcuts. Formatting is simple and WYSIWYG.
At home I record everything in evernote.com, as it is basically the free equivalent to OneNote. But as it stores everything on an external server, I won't use it for my company's material.
Second vote for Keynote here. It works great as a simple, hierarchical text database.
Imho, any kind of wiki-based systems will do the job.
Notes and files are fine, but wiki gives you a history - a very powerful feature!
Nice question btw. :)
I'm a Mac guy, so I use TextMate [1] and TaskPaper [2].
[1] http://macromates.comI don't save snippets, instead I keep all my projects uncompressed and if I need something I will look for it using tracker/google desktop (depending what so I'm using)... for figuring out stuff I use my old nootebooks, they are scribbled al over :P
I have one folder with all the docs in there. This is for personal use so I always know there the info I want is.
Plus I keep almost the same structure within projects.
Depends on the scope of the note, I suppose. For to-do list type things, I use FogBugz. (It's free for small teams and students)
For random notes, my old usage pattern was to open up a copy of NotePad, type stuff, then lose it because I restart my computer without saving it somewhere. Addressing my issue, I created a note program for my own personal use. Think of it as notepad with tabs and autosave, or alternatively, think of it like OneNote but not bloated. Free at https://webfiles.colorado.edu/allredj/, if desired.
I've used a number of methods over the years:
Paper Notebooks
Like most people, I started out keeping notes in a spiral bound notebook.  Notebooks last a long time with proper care. The drawbacks are inability to search and the fact that I have atrocious handwriting. And killing trees, I suppose.
MS OneNote
I have access to this at work and it's one MS product I really like. It has individual files for notebooks. This is great for organizing things at the project level. I can use a notebook for a project and then remove it form OneNote when the project is over. I still have it if I need it, but it's not in the way. It integrates tightly with Outlook - you can create meeting notes for an Outlook event with a single click and create tasks & link them to items in OneNote. It also supports diagrams and highlighting. The main drawback is that it's Windows only and it's not cheap.
Omni Outliner (Mac)
It's a very nice outlining tool and I still use it for lists and things (often in conjunction w/ Curio, below). But it falls short in organizing, traversing and searching large amounts of data. It just seems a bit cumbersome for all that.
Curio (Mac)
My current method of choice. I've tried Evernote, but (unlike a previous author) I can't get past the non hierarchical organization. Curio allows me to have a separate notebook (file) for each project, create simple diagrams, links and other do-dads. You can also create & embed documents on a page. The drawback is that, like OneNote, it's not cheap.
I always dedicate one of my desktops to a fullscreen emacs, so writing notes is only an Alt-Tab away. I store my notes in files called 'notes' in the relevant directory. The notes tend to get monolithic, but are quite useful because I either never read them at all, or I read through the whole thought process again and again.
I think any personal wiki is good for this sort of thing. Personally I use one that I wrote myself [1] because I wanted one that could sync with my phone, but tbh, any wiki is good if you figure out a nice way to structure the notes that makes sense to you.
[1] http://dale.lane.googlepages.com/I've read through the massive list of comments and there are a lot of good ideas in there. Personally, I've been using more and more of google's tools, such as google notes and google documents. Most of the coding I do is internal and requires me to vpn to work to get at. This can be inaccessible in some situations, I love the way I can always access my stuff on google, which is better than say a desktop application where the documents would be only on a local pc somewhere, or on the company wiki (which requires vpn access), or in source control (same as the wiki). Google tools have really good and quick searching technology built in. Until I find a really good global solution, I'm going to continue using Google.
I wish StackOverflow was up-and-running a few months ago when I scoured the web for the answer to this exact question. I had used Microsoft OneNote at a previous company, but no longer had access to it where I now work. I tried using some of the Wiki-based applications, but quickly got frustrated with it's usage model. I had also looked at some of the mind-mapping products out there, but those didn't fit the bill for me either. I have since settled on EverNote and have been using it for several weeks now.
I had my doubts at first because of its lack of support for organizing notes in a hierarchical fashion, but I've gotten over that. I like the fact that it supports tags and that you can filter your view by multi-selecting various tags.
I also like the fact that it runs locally, but can be synchronized on the Web. I had looked into the Google Notebook application, but didn't like the web-only UI.
Plain 4x6 index cards. plain white paper, or quadrille (5mm) from (http://www.printfreegraphpaper.com/) on a clipboard. Notebooks.
I'm also one of the old school folk that prefers pen and paper for taking notes. But I must add that when I finish up one notepad, I reread the whole thing and distill the most important ideas and notes and write them into my new notebook. Kinda like refactoring all my legacy ideas :)
Depending on the topics, I use several moleskin notebooks to keep notes. I tried OneNote for awhile but found writing it in a notebook allowed it to be portable for quick notes; e.g., pulling it out of my bag to make a note or reference while walking down the street.
First, I am on Mac OS X, so I have access to some great tools, which aren't available on other platforms.
For notes, I use Omni Outliner Professional. Great tool for capturing notes. If I need to put in an image, I use Omni Graffle. And finally, for tracking actions in a GTD way, I use Omni Focus.
Together, and they work together well, they provide me with a solid suite which keeps me on top of things.
I use a combination of a wiki (screwturn) and thorough and usefull source code comments. Nothing beats well commented source code to explain a paticular gnarly algorithm. Wiki entries are more useful for storing high level concepts like architectural decisions and designs, down to passwords to development servers.
I also use lots of post-it notes around my monitors.
Microsoft OneNote
I usually take notes during a meeting on plain old Paper and Pen. Then I keep the paper around as long as I need it, usually only a few days. If I need to keep information for longer, I'll type it in and save it in a Word document or something.
I've played around with OneNote, but it doesn't seem to fit the need the best. Maybe I just need to find a good system for using it.
A couple people I've worked with have just used Notepad to type notes in and they save a single text file for each day of work. Then they can use something like Google Desktop Search to search through all their notes.
I typically use my blogspot account along with my moleskin notebook and mark different sections like "learning", "projects" with page markers. Even though I like this system many times I find myself having a lot of notepad files named after the subject/project.
Hope this helps.
We have a team-wide wiki [1] to record all project details/documentation/design, everything really. Because it is just a wiki though, it requires some guidelines to make sure it remains organised. We are definitely looking out for improvements to the wiki software that allows us to organise the information better.
The important thing is the visibility the wiki provides to the team, and has become invaluable when team members move on from our company. The last thing we want to do is trawl through someones private documents to recover important information.

[1] http://www.mediawiki.org/Every good text editor (and by good I mean Emacs and TextMate) has a mode/bundle for note taking, organization, etc.
Try ORG mode on Emacs, or the notes Bundle in TextMate. I use the latter.
I use the Eclipse templates feature to store my code snippets. They are easy to write and parameterize, and can be inserted into your code with an easy ctrl-space. That is, if you use Eclipse of course.
Another vote for a plain old (big) text file and TextPad.
I could write a ton on what I do and why!
Basically, I use standard 3 ring notebooks, with squared paper.
I do this, because I find it is the most flexible method. It is easy to merge existing documentation and my own thoughts. It is easy to re-organize. The use of squared paper allows me to do diagrams and tables either in portrait or in landscape mode.
For small projects, I use a single notebook to hold several projects. For larger projects, I use one to several notebooks.
Random notes are simply kept in a notes section, and reorganized, as the organization becomes obvious.
All notes are dated.
When I convert notes to documents, I use Wordpad for the first draft, because of it's simple word processing capability. (The more complexity you have, the more time you waste on the prettyness.)
I try to keep one small topic per page to simplify reprinting.
Eventualy, documents become formalized, and are converted to Word or PDF files. (When this happens, it is no longer my problem.)
This method stood me well in my career as a programmer and analyst. In fact it got me a years worth of consulting. I got a contract to document the large system I helped to develope. I was the ONLY programmer (of 20) on the project who had bothered to do any documentation at all.
I was able to justify doing documentation (to others), as it kept me sane while doing on-call support and trouble-shooting for the whole system.
The method I used for this was an enhancement to the above notes system, with considerations for the incremental nature of the notes for a whole system.
Perhaps someone will ask a question about this topic.
I usually just open a plain text file and save it to my jump drive; however, I just started looking at InCollector, which provides more structure, directories and tagging, as well as search/filter capability.
I just started working just a few weeks ago so I don't really have a working proces for this. However I'm trying out Remember the milk [1], which seems to work pretty well. It's just list with some notes added. But this is an interesting issue. I'm definitely going to check through this list of programs posted by people and see if I can find something interesting.
[1] http://www.rememberthemilk.comI carry around folded sheets of graph paper, pack moleskin or similar notebooks if i'm going somewhere, or use whatever paper is available to scratch notes. On the computer i often just keep a couple ongoing email threads with myself, pasting stuff in as needed. Email info and notes to/from my mobile device that way too.
At home i try to boil, condense, and organize the info into OneNote. (Excellent app.) As for development techniques, code snippets, and programming stuff, use a simple blog or wiki to keep track. I like and use WordPress and TiddlyWiki.
Occasionally, ideas are best expressed as demo or prototype apps, which end up in d:\dev.
I like to use project spec sheets. I find that taking notes on them helps me hold on to those specs longer and make them more useful.
I use MS One Note at work, and it works pretty well. I also write a blog and put a lot of notes on there.
Have also looked at Evernote, but was not very impressed with it. Not very easy to organize things like in OneNote.
One con with OneNote is that is not free. So I have it on my work machine, but not on my other computers, so I can't standardize on it.
SharePoint offers a number of flexible tools with its wiki, list, and document libraries. We use it to hold all of our project artifacts, including best practice snippets, how-to's, etc.
I wrote a little script which takes a file with the last working day's notes, prepends today's date on it, and writes it to a file with today's date on it, then opens it in TextPad (which loads up on my second monitor).
The means that I always have my notes off to the right, and I jot down what I'm doing every time I do anything significant.
I was actually rather proud of the last working day bit, which even works out Bank Holidays.
I use Incollector(both Windows & Ubuntu) and Evernote on windows. Evernote has more features when compared to incollector. You can directly add text from firefox browser using the evernote plugin, drag & drop, mailto, tagging, images.
On Ubuntu, mostly use Basket note pads [1] and Tomboy Notes.
[1] http://basket.kde.org/pen and paper.
easy and simple.
work: keynote when on windows paper
home: gmail online random bits of paper when offline
Google Notebook for code snippets and research.
For projects at work a paper notebook.
I used to really like legal pads. I never missed anything, and everyone was quite happy. There's nothing like waving a legal pad around with pages of crossed-out tasks when the more Dilbert-themed managers wander by for showing progress.
That is, of course, until after a couple years the legal pads had accumulated several pages or so of low-importance, high-tediousness tasks.
Obviously, those types of tasks should have expired and disappeared, but I continued to copy them over and over again. I'm not sure what drove me to do so. OCD?
I probably should be all "Yo yo yo... I gots myself a tasks wiki integrated with VS2008 Team Server, and as I enter or complete items my current location is all imported-like from my iPhone and marked up on my Google Earth super-mashup along with the GPS locations of everyone I've done talked to about it... Later, I'll do a GE flyby on my completed tasks... way cool"
Nah. For years now it's all Notepad, KEdit, and post-its.
KISS.
Of course, I can't read post-its on my monitor from a client's site... so I may be due for a re-think. Webcams, maybe? :)
I use legal pads on hashing out rough ideas. Once I'm actually coding I tend to just write extensive notes to myself in Visual Studio, including liberal use of TODOs. As someone else mentioned OneNote really a great app as well, esp. if you're pulling lots of info from various sources.
For quick random ideas, I have a plain text file that I can quickly append to using
Quicksilver
[1] (ctrl-space .
random idea tab a tab n enter
). I also keep a physical notebook (nothing fancy) by my bed for emptying my brain if it's keeping me awake.
To-do lists go on Ta-da Lists [2].
To work out anything complex I use an A4 lined notebook or a whiteboard.
If I'm working with a colleague on a design, we use a whiteboard then take photographs, which get emailed around an written up.
[1] http://www.blacktree.com/I wrote my own very basic one for my personal code snippets but am thinking of moving them over to a blog shortly when I re-do my website.
At work we're investigating using the "Clippings" functionality within BBEdit. Basically the idea is to have a shared library that we all add to then redistribute occasionally but we're not sure how easy it's going to be to maintain.
I like DokuWiki[1]
From the main page:
DokuWiki is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful syntax which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files – no database is required.
Supports syntax highlighting for different programming languages and more...
I have a "personal productivity" wiki with Wetpaint.
I've used standard written notebooks in the past, but they have the same recurring problems:
My new strategy has three parts, but one focus: good data should be digitized in flexible "wiki-style format". This happens in three parts:
Some people have mentioned blogs and I think that this is a reasonable starting ground for sharing. But blogs are a weak way to organize evolving data. Things change and wikis are simply the natural home for things that change.