Naturally, this is the time of year to make goals and attempt to change. What a person feels like they need to change and whether that is a "good change" or not is highly personal and probably doesn't require much comment.<p>More interesting is how you go about making that change. What do you do (from types of goals you choose down to the daily implementation) to achieve your goals?<p>I always try to have a meaningful, measurable goal. I'm not going to lose weight, I'm going to lose 15 pounds in the next eight weeks. Then I break them down into tasks that can be followed daily, like measure all food consumed, exercise 45 minutes, etc.<p>The place where I struggle is the day-to-day tasks, and I still haven't found the answer. This can be especially hard for me on the winter as I deal with seasonal affective disorder (which is why I often wait until spring for my goals).<p>How do you manage your desire for growth and change?
I recommend starting with one task and adding to it as the year goes on. Learning the man pages could potentially make you a better programmer without reading K&R. Set K&R aside until February and achieve your first goal. It's important to change one behavior at a time and expect and plan for failure. Shoot for 5-6 days a week with 1 day review, or 3 with 2 days review, and just do what you feel with the extra day. Review or move forward.<p>Good luck. New Years Resolutions are great, stay motivated.
While I think it's a neat idea - I think in the end it's gunna be a case of in-one-ear out-the-other.<p>For instance I read all of "The Unix Programming Environment" by Kernighan and Pike. It's FULL of useful information (in fact I'd argue it's way better than reading man pages) and after I was done I felt like I was 10 times the Linux man I was. However unless you're fighting with Linux a lot on a daily basis you quickly forget 80-90% of what you read. For instance, I found it near impossible to remember what '@' does in bash scripts.<p>It's quite demoralizing - and I've had the same experience many many times with technical books. You not only have to read, but you also have to DO the things you read (strangely this isn't the case for history books, or books on the soft-sciences). This can be almost impossible for the more obscure (though still very useful) features like the zillions of cool-but-not-so-often-used flags you will come across in your man page reading.
Some preemptive advice: pick a small (tiny!) project and do it with C and/or sh and other command line tools (don't forget about awk and sed). Often you can do something quickly in a shell script that would be a pain to implement in C, but the reimplementation can still be a good learning experience. Once complete, repeat. You will learn far more like that than by trying to memorize man pages and doing programming exercises out of a book. I mean, did you try "man gcc"?<p>Of course, maybe the only way for you to realize this is by actually trying to memorize man pages and doing lots of programming exercises first. That's what it took in my case...
More than worrying about what to read next, I'd worry about fully understanding how a command is used in practice. It's one thing to read (say) the xargs man page and another thing to have a sense where it'll come in handy. Similarly, some commands have dozens of options, while you only need to understand a few for most of the common uses.<p>So I'd recommend doing a bit more than reading the man page. The best suggestion I can think of is to also read the top 3-5 questions on StackExchange that mention that command.<p>PS: after reading the man page for man itself, I recommend 'man apropos'. :)
I hope this works out for you. I've taken up learning vim this year, but my main problem is forgetting the things I've learned. I tried cue cards but they fill up far too quickly; so my answer was to store my notes on a wiki: <a href="http://wiki.jbud.me/index.php?title=Vim" rel="nofollow">http://wiki.jbud.me/index.php?title=Vim</a>
In addition to randomly generating a man page from /bin, consider mining your command line history and randomly selecting anything whose man page you haven't yet read. You'll want to keep a file of man pages that you've read, to help with that.<p>And since you're stocking up on C, don't forget that C's standard library is documented via man pages, e.g.<p><pre><code> man -k sprintf
asprintf (3) - print to allocated string
sprintf (3) - formatted output conversion
vasprintf (3) - print to allocated string
vsprintf (3) - formatted output conversion
XtAsprintf (3) - memory management functions</code></pre>
One thing I'd love to see if you embark and stick to this new year's resolution is creating a blog post per man page with all the exercises and examples you tried out by applying what you've learned from each man page. It'd be great if each post included something like:<p><pre><code> (1) What is the command
(2) What kinds of things you can accomplish with it
(i.e. why should I learn this command? how will
it benefit me)
(3) Examples of the command applied by itself
(4) Examples of the command applied in conjunction with
commands you've previously written about via piping.</code></pre>
Good plan. I've started to print out man pages and using them for learning / reference. This post: <a href="http://macgeekery.com/tips/cli/pretty-print_manual_pages_as_ps_pdf_or_html" rel="nofollow">http://macgeekery.com/tips/cli/pretty-print_manual_pages_as_...</a> got me set up using groff to pretty-print the good stuff.
Instead of man pages, I'm doing it with books. Goodreads.com makes it pretty easy (and fun) to manage everything. My goal is to get through all the classics this year and of course, like you said, apply that knowledge to my everyday programming.
This is such a good idea, I've added it to my goals, under my "Invest in Knowledge Portfolio" category. One thing that scares me a bit though is that some man pages are <i>enormous</i>, possibly more than can be digested in one sitting.
The ultimate goals section lists mainly things I've done in 2012. I've benefited hugely from every single one and can only recommend those things to anyone (especially becoming a better C programmer).
Neat! You should keep track of your man page reading and share your experience! I'm anticipating your homepage growing into a wonderful electronic flower of information.