Learn how to write before graduating.
Would Linux have succeeded if Linus Torvalds hadn't evangelized it? As brilliant a hacker as he is, it was Linus's ability to convey his ideas in written English via email and mailing lists that made Linux attract a worldwide brigade of volunteers.
Have you heard of the latest fad, Extreme Programming? Well, without getting into what I think about XP, the reason you've heard of it is because it is being promoted by people who are very gifted writers and speakers.
Even on the small scale, when you look at any programming organization, the programmers with the most power and influence are the ones who can write and speak in English clearly, convincingly, and comfortably. Also it helps to be tall, but you can't do anything about that.
The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it's not whether they prefer Python or Java. It's whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There's a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don't write very well (or don't write at all), and so nobody knows what they've done and their brilliant code languishes.
I won't hire a programmer unless they can write, and write well, in English. If you can write, wherever you get hired, you'll soon find that you're getting asked to write the specifications and that means you're already leveraging your influence and getting noticed by management.
Most colleges designate certain classes as "writing intensive," meaning, you have to write an awful lot to pass them. Look for those classes and take them! Seek out classes in any field that have weekly or daily written assignments.
Start a journal or weblog. The more you write, the easier it will be, and the easier it is to write, the more you'll write, in a virtuous circle.
就像Joel所提到的,通过明确清晰的注释和技术文档,其他程序员可以理解并且使用你的优秀的代码,而不是重写一段,普通的用户可以更好的理解你的程序的功用,从而发现程序的价值.很多优秀的代码因为程序员不知道如何传达他们的想法而被埋没,而Linux和Extreme programming被人们熟知在一定程度上是因为他们的宣传者知道如何清晰有效得去表达这些想法,人们才能意识到:哦,这是个牛逼的东西
大一的时候程序从来不写注释,尤其是大作业,一个自认为还不错的算法最后却得了一个很让人觉得滑稽的分数,现在想想,也许是助教没能理解或者没有意识到这是个好算法,但这能怪谁呢?那么多程序和代码,很少人能在匆忙之中发现一段代码的独特之处,而你又没有清晰明确的技术文档,好吧,你没有机会了...
如果你仅仅是为了获得自我完成的满足与成就感,你可以选择不写注释,但是如果你要完成的是展示性的工作或者上交作业,那么还是想想如何去展示你的想法吧..既要把用户和助教当成白痴,又不能失去一个理科生和程序员的严谨
就像Joel所说的,你写的越多,你就会发现 表达你的想法其实并不是很难,当你觉得它不难后,你便会更多得去写,恰好是一个良性循环.恩,我还是把这个Blog坚持写下去吧,还有下学期的 ACM选拔,不要忘了一个好的解题报告:)