Monday, August 20, 2012

What I've Learned from TagFS

I started TagFS because, first of all, I thought it would be a good idea. What really drove me to keep working on it though, was that I was learning things that I wouldn't have even bothered to look into before. Because this project has been a source and guide for my learning I thought it would be worthwhile to make a list of what I have actually learned over these months. So, without further ado:
  1.  Software design (diagramming and statement of expected program function)
  2. The C language
  3. Memory management--and memory leaks
  4. Trie data structures ("staged" directories)
  5. Developing a types system (tag value types)
  6. Using an issue tracker and public code repository (GitHub)
  7. Using software revision control (git--still learning :P)
  8. Software build process (Makefiles)
  9. Logging program execution with levels of verbosity
  10. User level file system operations on Linux
  11. Code generation (very ad-hoc and a pain to work with, but I am using it)
  12. Input parsing (query interface; doesn't follow the formal (tokenize-> parse) pattern, but it works)
  13. Vim-fu
  14. Data serialization and storage (the database file and proposed xattr data storage formats)
  15. Software testing (made some attempts at automation)
  16. Pacing
  17. Exercise regularly and eat right--you can't code effectively if you're tired and out of shape all the time
  18. Your code won't runaway overnight--turn off the laptop and get a full night's sleep
Lately, I've felt discouraged by this project because even though it's been months since I started, with several breaks in the middle, it still isn't in a very usable state. Thinking about some of the things I've learned gives me some well-needed perspective and reminds me that there was a point to all of the time I've spent working on TagFS. Most likely, I will abandon TagFS indefinitely because, for all that I've gained, the time I lost on it might have been better spent improving my social life.

Regardless, I hope that this brief listing of my learning experience can encourage some others out there who, like me, have wanted to learn a skill independently but felt like making anything complex was too big of a challenge. The only barriers are motivation and knowledge; having a goal--and this is with anything, not just programming--will do wonders for directing your learning and motivating your actions. Find anything you want to do or make, set your goals and pay attention when you've achieved them. That's really all it takes.