Source Code Control
is a distributed
revision control system. http://git.or.cz/
is the Concurrent Versions System, a tool for source code revision control. The CVS home page is at http://www.cvshome.org/
and the User's Guide (also called the "Cederqvist Manual" because it was written by a guy named Per Cederqvist) is at http://www.loria.fr/~molli/cvs/doc/cvs_toc.html
. A book called "Open Source Development With CVS" is partially online. The parts that are online seem to overlap substantially with the Cederqvist book but might be useful: http://cvsbook.red-bean.com/cvsbook.htm
CVS is fundamentally a UNIX program, but there are several different clients available. WinCVS is the most commonly used, but it's not very easy for non-technical people to use. At a couple of shops I've worked at we used CVS for code and Microsoft's VSS for documents. This is a bad idea for a lot of reasons, not least of which is that it requires you to use Windows to access version control. That's why I'm really excited about TortoiseCVS http://www.tortoisecvs.org/
which is a very well-designed Windows interface for CVS. It plugs into the Windows File Explorer so there's no new UI to learn; you perform version control operations from within a tool that everybody already knows how to use. Cool! (You can make TortoiseCVS play nicely with Cygwin if you tell TortoiseCVS to use your Cygwin home directory as its home. That way you can check out a directory tree using TortoiseCVS and then do cvs operations in Cygwin without having to login again. right click->CVS->Preferences... then click on the "Quirky" tab
is another version control system that attempts to fix the problems in CVS while adding new features. It's had an interesting
life so far; the primary developer went bust while writing it and it's since been picked up by other folks and has become a GNU project. http://www.gnu.org/software/gnu-arch/
is a patch-oriented version control system. It's interesting in that it doesn't look at code in terms of a tree that evolves over time, but in terms of a set of patches that product a desired result. http://darcs.net/
is changeset-oriented system. It's supposedly the leading candidate to become the next-gen Linux SCM if Linus decides to switch away from git. http://www.selenic.com/mercurial/
Writing good commit messages
Producing Open Source Software
"is a book about the human side of open source development. It describes how successful projects operate, the expectations of users and developers, and the culture of free software." From a quick skim of the table of contents (the whole book is online) it looks to be very complete.
Project Life Cycle
- is a collection of very useful info regarding the various phases a software project goes through over its life cycle. It also includes some template documents which are useful for interaction between the client and consultant. http://www.cratchit.org/dleigh/plc/plc-index.htm
- is an extremely
nebulous term in the context of software. Everyone agrees that it's important, but nobody really agrees on what it is. This site is a useful resource, though. http://www.bredemeyer.com/
The Architecture of Open Source Applications - http://www.aosabook.org/en/index.html
- is a recent fad methodology, and I've pretty much hated the various programming fads that preceded it (TQM, ISO9000, CMM, etc). XP has some very good features, though, some of which I've incorporated into my day-to-day work. One is a strong belief in unit testing, which has definitely paid off for me. Another is working closely with the customer and setting very small, visible goals that you can easily track. Worth an hour or two at their web site: http://www.extremeprogramming.org/
How To Ask Questions The Smart Way
- Eric Raymond has written many interesting papers about programming in general, and especially Open Source. This one is great - it explains how someone can ask questions of programmers in a way that's most likely to generate a successful response. If you're a user then you should read it; if you're a programmer then you'll probably find it handy to point people to: http://www.tuxedo.org/~esr/faqs/smart-questions.html
How to Report Bugs Effectively
- are the documents that describe internet protocols. There are many ways to get them; among them are raw
Binary Arithmetic Considered Harmful
- It's not commonly understood that binary numbers are imprecise to the right of the decimal point. http://www-106.ibm.com/developerworks/java/library/j-jtp0114/
is a good intro to floating point and its problems. Although Java-centric, it has a good introduction to the topic and good references.
is an open-source C++ library for sophisticated financial calculations.
Linux in the Workplace
is a book that talks about how to use Linux in a business environment.
Communicating Sequential Processes
a theoretically sound approach to concurrent programming.
Gardening With Tracer Bullets
I agree with most of what these guys are talking about. The more you try to "anticipate" what you're going to need in the distant future the more that you're guessing. Start small and build on that. I love the "programming is gardening" metaphor.
Notes on Distributed Computing
Sun labs researchers point out the ways in which writing distributed computer programs is different than writing local ones.
How to denote numeric ranges
In summary, use
lower ≤ i < upper
. Another way to describe these is "half-open ranges": http://www.siliconbrain.com/ranges.htm
- XML, despite what Java folks will tell you, isn't the be-all and end-all of markup languages. The interesting discussion at http://www.reddit.com/r/programming/comments/7muux/ogdl_an_incredibly_lightweight_markup_language/
discusses OGDL, YAML, and XML and how they compare to one another.
- the best quick intro I've seen: http://wiki.secondlife.com/wiki/Unicode_In_5_Minutes
, and another that goes deeper: http://dmiessler.com/study/encoding/
A fun rant about how "unicode" is not the same thing as "utf-8": http://enjoydoingitwrong.wordpress.com/2009/06/22/unicode-is-not-utf/
- a very interesting article about how "makers" and managers view time differently: http://paulgraham.com/makersschedule.html
This is related to Demarco and Lister's discussion of "flow" in Peopleware
. Here's Joel Spolsky's review of Peopleware
Somewhat related is the question of what really motivates creative people. Turns out it's not money: http://www.youtube.com/watch?v=rrkrvAUbU9Y
Well-researched presentation about software management (team size, hours, etc): http://www.lostgarden.com/2008/09/rules-of-productivity-presentation.html
Even very short interruptions have a surprisingly large impact on error rates: http://www.futurity.org/top-stories/3-second-distraction-doubles-work-errors/
- open plan offices are less productive than offices with doors
Developer Support Handbook
In this handbook, I mostly cover the first aspect of providing an API: support. It is probably the least glamorous aspect, but on the other hand, it is vital. You can have the best API in the world, but if people post in your forums and the response is just crickets chirping, then the developers will not stick around for very long. On the other hand, if you treat your developers well, then they will (for free) provide you with valuable insights about ways to improve your API, and they will evangelize your API for you.
How to Design a Good API and Why it Matters
- Uses Java examples but it's generally good advice for any language: http://lcsd05.cs.tamu.edu/slides/keynote.pdf
- from the UK Government design group: https://www.gov.uk/designprinciples
from Dieter Rams, a famous industrial designer: http://www.vitsoe.com/en/gb/about/dieterrams/gooddesign/
Guess Gender by First Name
- code (and database) to guess a person's gender from their first name: http://www.autohotkey.com/community/viewtopic.php?t=22000