Saturday, April 12, 2008

What Is Your TO-LEARN List for This Year?

Face ISN'T the Index of Mind

I love reading interesting blogs. One of my very favorite blogs is BetterExplained by Kalid Azad. I was reading one of his posts which was about "Building a site you (and your readers) will love" and in that blog post he recommends a famous blog which I knew from a very long time but never read because they were monstrous (too long). It's none other than Steve Yegge's blog. I admire Kalid's writing and a recommendation coming from him is highly regarded by me. So, I went ahead and read a few blogs of Steve Yegge. Before reading his blog, I had a prejudice about Stevey and I thought he was just a guy who rants about things endlessly and the articles are boring and controversial (like VI vs EMACS). I never completed the first paragraph of any of his posts cause I was too scared and too tired to read due to the scroll bar's length. But this time around, I scheduled some time and read some of his writings.

I loved his blog. I missed them all these days, but that's OK. Yes, he writes BIG articles, but they are worth reading for a programmer. In one of Stevey's posts, he talks about Practicing Programming (isn't that my blog's name?) and he gives a few drills for us. That made me think about "What do I want to learn this year?" I will list them here now. This will make you aware or motivate you in learning the things you have planned but never did. That's what you can take from reading this post. You can also give me suggestions if you think I am wrong somewhere with my choice. The following is the list that I made to answer that question. All the suggestions are highly appreciated.

(X)HTML + CSS

I learned HTML & CSS just by looking at the source of a few sites, and to customize my blog just to a point where I will be done with what I wanted. I know "what" makes it work but I don't know "how" it works. And XHTML being the language spoken by the web server to the web browser, it is my necessity to learn it well. In my honest opinion, every developer must know XHTML in today's world. (Don't you want to have your own site?)

Book: Head First HTML & CSS

Shell Scripting

Don't I know? Yes, I do. Again, it is exactly like how I know about HTML & CSS. I want to learn stuffs thoroughly. I love Unix, I like to work on the command line. It makes me feel like I'm a rocket scientist doing complicated stuffs :). But that's not the point. Unix is tougher to use than MS Windows and both their philosophies are completely different. Learning Unix and Shell Scripting should be one of the top priorities for a developer who doesn't work on MS technologies. And we all the know the benefits of scripting.

Books: Any recommendations?

Regular Expressions

This should be fun. Regex is very powerful and great. But with great power comes greater responsibility. So, I should really be knowing what I am doing with it. I have written a few regexes, but I am just an ordinary user. I want to elevate to the power user category in regular expressions.

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. --Jamie Zawinski
Book: Mastering Regular Expressions by Jeffrey E. F. Friedl (O'Reilly)

Python

My favorite scripting language. I love the syntax though I seriously hope that it's source code documentation gets improved (the one that we get with the help() function). Again, I know, I can write scripts, I can figure out things. But I would like to learn more here. Probably, I need to spend more time or write an Open Source module that is missing. This will surely be a good exercise to learn more.

Book: Python in a Nutshell by Alex Martelli (O'Reilly)
Online: Tech talks about Python on Google Videos by Google's employees (Alex has one too)

C

I'm ashamed to say that I not proficient with the mother of modern programming languages. Yeah, I know what you are saying, I learned in school. I also learned rocket science in school, does it count at NASA?

Books: Any recommendations here?

J2EE

I will be working on real J2EE applications now, not the ones we try out for learning it. I learned a lot of Servlets, JSP, EJB and so on. But never implemented them or got a chance to do these things at work so far. But now, I have to. I will learn all the buzzwords like JMS, WAS, Web Services, EJB, etc. that you "cool J2EE" dudes talk about. (Am I sounding like Stevey now? Whatever!)

Books: No idea, just Google.

VI/VIM

Now this will be really hard. I use Eclipse for everything and working on something tougher than notepad should be real fun. I know how to use it, I am not a complete stranger to VIM. I even know how to enable syntax highlighting, and stuff. But I want more than that. I would like to do find/replace without searching vim.org for tips (regex again). I would like to find out the total number of lines/words/characters while I am in the editor (not using grep on shell). I would like to do copy pasting very freely. I want all this to be done and more without my conscious mind getting disturbed while it's doing some other task. VIM should become the extension of my hand.

Books: Any suggestions?

Subversion (SVN)

I love Subversion (do you know Linus Torvalds hates it?). I love Subversion because it is free, easy to use, has excellent support for IDEs and has a huge community. I have used Subversion before at my workplace, I use it currently for my Open Source project hosted at Google Code. But I want to learn more about it. I want to know how to setup an SVN server that supports http and https connections. I want to know how the authentication and authorization need to be configured. I want to know how to work with SVN just by using the command line interface (for fun). I want to collect the useful commands, tips, and best practices.

Book: Version Control with Subversion (O'Reilly)

Release Version 1.0 of Clipboard PingPong

That's the first open source software that I created which can be used to transfer clipboard contents across computers. It's at version "0.0.2" at present. I want to bring it to the general audience. Learning some of the things mentioned above will help me bring it in a better shape. It's really exciting, though it's very very small (I would like to keep it that way). Hopefully I will learn a lot from this experience and I can start contributing to other bigger and useful Open Source projects in future.

Blogging

Of course. This doesn't belong in "TO-LEARN" category but it's more of a TODO. Well, blogging about blogging is generally hated. So I won't go any further, it's boring too. But I would like to quote one thing from Stevey's blog post:
Even if nobody reads them, you should write them. It's become pretty clear to me that blogging is a source of both innovation and clarity. I have many of my best ideas and insights while blogging. Struggling to express things that you're thinking or feeling helps you understand them better.
The last line is so true.

What If I Don't Complete Everything I Mentioned?

I will be very disappointed. If I don't finish the mentioned things with *satisfaction*, I will push it to next year. But life is so short and knowing these things are necessary for anyone who wants to become a good software developer. Just knowing Java, using Eclipse and developing on Windows totally sucks! Life is much bigger and better than that. I will be working very hard and pushing a lot to complete these things. But quality matters more than quantity. I would rather learn half the things mentioned here thoroughly than just skimming through everything. In fact, I know most of the things mentioned here. I just want to know them better than an average developer in the streets. My quest is understanding better than just knowing them.

Next Year

It's too early but I left out a lot of things that were there in my head. These are the things I plan to do next year:
  • Algorithms & Data Structures
  • Algorithms & Data Structures (yes, I would like to do it twice)
  • SQL in detail
  • Unix Operating System in detail
  • EMACS
  • Ruby (could be replaced by Scala)
  • JDK 7 new features (with a fresh mind after learning the other things)
That's all. (If you have read this far, you are really great!)

References

26 comments:

goodlegs said...

I would kill two birds with one stone and skip shell scripting - python is perfect for scripting, and you'll learn a different set of python's abilities through using it for scripting.

Jeremiah said...

The ABS Guide is the resource that helped me the most while learning shell (BASH) scripting.

Srikanth said...

Thanks green-boy and jeremiah.

Jeremiah: The ABS looks in depth and comprehensive. I will bookmark this.

Recently I found a very good Unix command cheatsheet. The guy has the cheatsheet in PDF and booklet format also.

Thanks for the comments :)

Anonymous said...

I applaud the optimism and effort you plan to put on learning that list - but it looks a bit long to be completed in one year.

Of course dedication to it will bring you further, and it depends on what else you have going on in your life.

One comment about the blogging part: it's customary to link to something you're talking about if it is available online and your readers might not know what it is (or especially if it's another blog). This way, we don't have to search for what you mentioned to see if we might find it interesting too.

Anyway, good luck with your endeavors this year and those in the future!

Anonymous said...

I recommend 'Dive into Python' by Mark Pilgram. It's how I learned Python. It's available for free from the website.

Srikanth said...

Thanks Sammy! I felt the same when I was counting the number of items in the list. But I know most of them mentioned there. I had even taught Python to juniors in my previous company.

But I would like to learn them thoroughly and I have planned to put in a lot of effort before going to bed after office hours.

Regarding the hyperlinks: I find it especially annoying when there are bunch of links when I'm reading. But surely, like you said I can strike a balance and mention the appropriate ones as inline links rather than putting it at the end.

Thanks again! :)

Srikanth said...

Hi Rory, that's a good suggestion. I also learned Python the same way as you. It's really good when we already know some other language and we just want to dive in straight away.

And thanks to Mark Pilgrim, the book is available for everyone online.

Unknown said...

Believe it or not! Even I had written 'ALGORITHMS' twice on my to-do list. Its something you wish to master, but there is no easy way out other than to read, read and practice the vast array riddles around you.

Though learning of all the things you have mentioned is reqd, but it would be tasteless if you are not using them in your day-to-day life coz you have mentioned a vast array of technologies (yes! you can dive just into J2EE and never come out of it :D ). So as you said, I guess you need to find interesting OSS projects and make your hands dirty.

Rohan Sharma said...

For learning C, I have a few recommendations:

K&R (duh!)
C: A Reference Manual
The C Puzzle Book
C Traps and Pitfalls
Expert C Programming: Deep C Secrets

Kenneth Finnegan said...

I'm going to second The C Programming Language Second edition by Kernighan and Ritchie. As someone who already knew how to program, the thought of reading a 1000 page book was less interesting to me. I've read the 250 page book cover to cover and feel like I have a STRONG command of the C language.

Shameless plug: I'm starting a website about tricks in C: ctips.pbwiki.com
Granted it isn't done yet, but there is already some content on it.

Anonymous said...

For Vim:

vimtutor!

Anonymous said...

On top of my TO-LEARN list is TADS, an OO language for creating Interactive Fiction

OK, that won't help me professionnally, but I love interactive fiction :)

Peter Michaux said...

No need to learn XHTML

http://www.thewebcreator.net/2007/04/16/why-you-should-be-using-html-401-instead-of-xhtml/
http://www.webdevout.net/articles/beware-of-xhtml

It seems HTML 5 is the future and that XHTML is likely to die.

Srikanth said...

Joyesh: It's true. Algorithms are very interesting but easy to forget. Like you mentioned "practice" is the key. I am gonna do that a lot when I touch the subject next time.

Screwperman: The C Puzzle Book looks very interesting to me. I will add it to my list. Not sure if "Expert C Programming" is a good place to start C again, but from what I heard it also seems to be a must read for C. Thanks for suggesting :)

Kenneth: Thanks! I wouldn't want to go and read a 1000 page book either. Definitely not gonna read "What is a variable?" and stuff like that.

Samuel: All the best with your TADS. Let me know if it's interesting :)

Peter: When HTML5 comes out, I will plan to learn that too. But for now, XHTML and CSS. I've already started it and I am half way through. I better complete it. I have promised myself to finish what I start :)

Raphael said...

This is a great blog post, as from it I've discovered several new blogs I'm interesting in reading regularly.

Thanks!

One note - your list does seem fairly large. You may be doing this already: it may help to tackle each piece individually, so you aren't trying to learn too many things at once.

I know when I try to learn too much at once (too many subjects) I end up taking longer to really understand them than if I had focused on one thing first then the next.

Unknown said...

Two tips:

1. Focus on learning one language, and then learn it well. You might be different, but I certainlay can't cope with learning two languages in a year - I might be able quickly read up on two and write a little code in both, but then I wouldn't really have learned them.

2. Learn Git instead of Subversion. The only drawback with this is that you'll probably be forced to use Subversion at work and then feel "constrained". True there's *more* to learn with Git, but once you got some dirt under your nails, it's just so much better than Subversion.

Ellis said...

Regex: Get a copy of Regex Buddy.
C: http://aelinik.free.fr/c/

I too need to get with it with SVN.

Sean said...

The best way to learn VIM is through immersion. If you're an Eclipse user, get the viPlugin for Eclipse.

Srikanth said...

Raphael: Thanks for the encouraging words :). The list does seem a bit long. But VI, Shell and Regex will have to go in parallel (3 months should be enough). And for SVN, I have to schedule a month, setup a repo and do all the practicing. HTML + CSS, I am almost done with it. I will finish it this month. Python and C will take my remaining days, which will be approximately 4 months (roughly 4*30 days). I will post my results this year end, so lets see :)

Christian: If I don't finish one language thoroughly (I am starting with Python), I will not move on to the next. But having good knowledge about Python, I am quite sure to wrap that up quickly (may be in a month). I want to learn GIT too, the concept is new to me. But I would like to learn SVN thoroughly before moving there. Probably I will have it next year in my list :)

Ellis: Thanks for the links :)

Sean: I will have a lot at that plugin, thanks you very much!

Anonymous said...

I really like your determination, but I think your list, as many other to-learn lists of other programmers, is too focused on technical skills.

Companies are increasingly requiring more involvement from programmers, and with this involvement comes other skills of a non technical nature, such as communication skills. What would you do to enhance the communication skills you already have? This is an evergoing learning.

Moreover, an extraordinarily large list of things to learn can spoil your focus and trigger an unnecessary anxiety. Taking care of one's health is something that also requires some dedication, and one cannot abdicate taking care of his health even for the sake of learning (mens sana in corpore sano). Sick, anxious programmers are not productive as they could be if they were healthier.

Again, I really applaud your enthusiasm, but I think you should look for non technical skills and not let your learning goals undermine the very health you need to learn.

Srikanth said...

Hi Dalton, thanks for dropping by and thanks for the encouraging words :)

I think both of your points, communication and health, are very valid and I can't agree more.

I guess blogging and reading can improve my communication skills a bit. But, I would like to do some tech talks within the company to take it to another level (public speaking is scary). I would also like to refresh my grammar once I get a chance, I'll probably have it in my to-learn-and-improve list the year after next year. I forgot most of what I learned in school about English grammar and English not being my mother tongue, it's always difficult for us.

Coming to your point regarding health. I really don't have an answer. I have to think about this. Thanks for bringing up and reminding me and for all the others who need to take care of their health.

Kalid said...

Hi Srikanth, just ran across this article -- thanks for the kind words!

That Steve Yegge post helped motivate me to start blogging, and I like his writing style (though it is extremely verbose... you need to set aside a good hour for it).

That's quite a to-learn list, I have a giant text file full of topics to read about also. Unfortunately it just seems to get longer over time -- once I knock an item off, it seems there are two more in its place :).

Srikanth said...

Thanks Kalid for dropping by :)

For me, your post and Steve Yegge's post motivated me to blog *quality* posts and I am still striving for it. My list keeps getting bigger and bigger too. I started programming just 3 years ago, so you can imagine how much I need to learn.

So much to do, so little time :)

Anonymous said...

To learn Shell Scripting, go for Unix Shell Programming, Third Edition by Stephen Kochan & Patrick Wood.

Anonymous said...

Hello Srikanth,

I'm here again because I've changed my mind with regard to some of my ideas. Communication, which I had previously mentioned as a non-technical skill, is actually a (very) technical one. It becomes very clear as you consider the number of books on communication theory and keynotes on the topic.

Moreover, the very idea that communication is a solely personal skill seems to indicate a disconnection with other disciplines, an isolation that is a byproduct of excessive specialization - the very problem that I was complaining about in the first place.

The personal skills which I now consider as real personal skills are those derived from emotional intelligence. Your diplomacy, for instance, demonstrates such skill.

Srikanth said...

Dalton, I'm very glad to have you back again!

I agree with what you told regarding communication. It is becoming very technical and essential. Ordinary communication is no more acceptable. This includes verbal and written. I'm very poor in presenting something, may be that's because I hardly do and I lack practice. I've to work very hard on that. It's also true when Steve Yegge said that most of the developers lack "marketing skills."

That's something I was missing in my list. And some of your earlier predictions on my TO-LEARN list became very true as the year is almost ending. I wasn't able to do half the things I mentioned. I'll blog about that in detail sometime later this month.

In my next year's list, I'll have to include fitness and communication.

Post a Comment