国外网站评出对程序员最具影响的书籍清单

国外知名网站 stackoverflow 上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?这个调查已历时两年,目前为止吸引了153,432 人访问,读者共推荐出了 478 本书(还在增加),其中最火的一本书《Code Complete》被顶了 1333 次。如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天 才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知识,我们毕业后能帮助我们在公司中胜任工作的老师就是这些优秀的书籍,一本好 书可以改变一个人的一生。 下面是这个调查中排名靠前的书的一个简单的清单: 

第一名:1333票《Code Complete (2nd Ed) by Steve McConnell》,中文版《代码大全(第二版)》,两届Software Jolt Award震撼大奖得主! 

code complete

第二名:1181票 《The Pragmatic Programmer》,中文版《程序员修炼之道》 

第三名:701票 《Structure and Interpretation of Computer Programs》,中文版《计算机程序的构造和解释》

第四名:572票 《The C Programming Language》,中文版《C程序设计语言》 

第五名:481票 《Introduction to algorithms》,中文版《算法导论》 

第六名:478票 《Refactoring: Improving the Design of Existing Code》,中文版《重构:改善既有代码的设计》 

第七名:447票 《The Mythical Man-Month》,中文版《人月神话》 

第八名:440票 《Design Patterns》,中文版《设计模式》 

第九名:394票 《The Art of Computer Programming(First Volume Hardcover)》,中文版《计算机程序设计艺术(第一卷)》 

第10名:364票 《Compilers: Principles, Techniques, and Tools 》,中文版《编译原理》 

第11名:329票 《Head-First Design Patterns》,中文版《Head First 设计模式》 

当然了,这里的排名并不具有什么权威性,但绝对可以说都是好书,这11本外还有很多书虽然票数不是那么多,但大家估计都耳熟能详,比如《Effective C++》(中文版《Effective C++:改善程序与设计的55个具体做法》),《Clean Code》(中文版《代码整洁之道》),《Effective Java》(中文版《Effective Java中文版(第2版)》等 。”

来自http://book.51cto.com/art/201103/249957.htm

通过Python得到一张图片或logo的主要颜色

看到一篇博客Pick the dominant colour from a logo using Python,一段代码实现了该功能, 效果还不错, 我把代码稍微完善了一下, 方便测试 🙂

python pick_dominant_color.py -f xxx.gif

[cc lang=”python”]#!/usr/bin/env python
# -*- coding: utf-8 -*-

import colorsys
from PIL import Image
import optparse

def get_dominant_color(image):
“””
Find a PIL image’s dominant color, returning an (r, g, b) tuple.
“””

image = image.convert(‘RGBA’)

# Shrink the image, so we don’t spend too long analysing color
# frequencies. We’re not interpolating so should be quick.
image.thumbnail((200, 200))

max_score = None
dominant_color = None

for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
# Skip 100% transparent pixels
if a == 0:
continue

# Get color saturation, 0-1
saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

# Calculate luminance – integer YUV conversion from
# http://en.wikipedia.org/wiki/YUV
y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

# Rescale luminance from 16-235 to 0-1
y = (y – 16.0) / (235 – 16)

# Ignore the brightest colors
if y > 0.9:
continue

# Calculate the score, preferring highly saturated colors.
# Add 0.1 to the saturation so we don’t completely ignore grayscale
# colors by multiplying the count by zero, but still give them a low
# weight.
score = (saturation + 0.1) * count

if score > max_score:
max_score = score
dominant_color = (r, g, b)

return dominant_color

def main():
usage = ‘usage: %prog -f filepath’
parser = optparse.OptionParser(usage)
parser.add_option(‘-f’, ‘–filepath’, dest=’filepath’, help=’-f filepath’, type=’string’)
(options, args) = parser.parse_args()
if options.filepath == None:
parser.error(‘must has -f option!’)
try:
img = Image.open(options.filepath)
except:
print(“can not open the file”)
return

print ‘#%02x%02x%02x’ % get_dominant_color(img)

if __name__ == ‘__main__’:
main()[/cc]

美国《纽约时报》网络版今天撰文称,尽管Android存在一些不足,但仍在逐渐吸引开发者向这一平台投入资源。


每天仅赚1美元

Android开发者最近在曼哈顿市中心举行了一次非正式聚会,除了冰镇啤酒和热匹萨外,还充斥着许多行话。当然,话题不可避免地转向赚钱。

现年26岁的软件开发者詹姆斯·恩格勒特(James Englert)刚刚发布了他的第一款Android应用。这款应用专门用于显示火车时刻表,在被问及收益时,他给出的数据是:“每天1到2美元。”

房间里顿时爆发出笑声。“这是笔相当好的收益。”他对众人的喧闹回应道。

其他开发者可能会对恩格勒特的遭遇感同身受,因为开发Android软件尚未成为一门赚钱的生意。尽管Android销量飙升——谷歌表示Android手机目前的日激活量达到20万部——但与苹果及其欣欣向荣的应用商店相比,Android应用市场仍然缺乏活力。

改善支付环境

在专家和开发者看来,之所以出现这种状况,部分原因要归咎于Android Market——占据主导地位的Android应用商店——存在一些蹩脚的功能,从而给那些希望快速购买应用的手机用户带来麻烦。对于一名新手而言,由于Android使用Google Checkout而非PayPal等知名的网络支付工具,因此许多Android开发者不得不免费提供应用,并依靠移动广告来负担成本。

“这并非最好的即兴购买环境。”Larva Labs联合创始人马特·赫尔(Matt Hall)说,这是一家专门为Android、iPhone和黑莓开发游戏的企业。“很难想象会有一款应用,让你愿意坐在那里,并输入信用卡信息。”

但是随着Android的热度持续激增,而谷歌也采取了一系列消除障碍的措施,使得这种趋势开始改变。例如,Android Market最近在显示应用价格时,已经开始以用户而非开发者所在地的货币为准。

谷歌工程副总裁、Android主要架构师安迪·鲁宾(Andy Rubin)说:“我们看到的仍然是1.0版本的生态系统。我们每天都在考虑,如何将阻力降到最小,让生态系统随着平台一同发展。”

鲁宾表示,目前有27万开发者为Android开发软件,Android Market目前可供下载的应用已经达到10万款,较今年3月的数字翻了3倍。

开发者也能够感受到这种变化。“以前我跟别人说我为Android开发应用时,他们会用异样的眼光看着我,就好像我长了三个脑袋一样。”说这话的是迈克尔·诺瓦克(Michael Novak),他在移动广告软件公司Medialets负责Android开发,并且参与组织了一月一次的“纽约Android软件开发者见面会”(New York Android Software Developers Meetup)。“当时距离现在才一年。而如今,所有人都知道Android了,它的热度已经激增。”他说。

平台分化严重

Android的成功原因或许正是其最大的发展障碍。

由于谷歌将Android免费提供给多家手机厂商,因此市面上存在数十款不同的Android兼容设备,但每一款都有着不同的屏幕尺寸、内存容量、处理器速度以及图形性能。一款能够在摩托罗拉Droid手机上完美运行的应用,在宏达电的Android手机上使用时,或许会出现问题。而与此同时,iPhone开发者只需要考虑iPhone、iPod Touch和iPad等少数几款设备。

当芬兰软件开发公司Rovio准备将热门iPhone游戏《愤怒的小鸟》(Angry Birds)引入Android时,该公司花费了数月时间在多款设备上进行测试,以确保其正常运行。

“分化太严重了。”Rovio的程序员彼得·维斯特巴卡(Peter Vesterbacka)说,“比起为iPhone这样单独的一款设备开发应用,这种挑战要大得多。”

但他表示,从最终结果来看,这种麻烦还是值得的。《愤怒的小鸟》登陆Android平台首周的下载量就突破300万次。通过0.99美元的单价,Rovio借助iPhone版《愤怒的小鸟》获得了数百万美元的收入。尽管如此,该公司还是选择免费推出附带广告的Android版本。之所以采取这种方式,部分原因在于Android Market只对32个国家和地区开放,而苹果应用商店则对90个国家和地区开放。Rovio担心那些无法购买该应用的用户会使用盗版产品。

但开发者还表示,或许根本无法通过Android收费应用获利。

谷歌表示,希望最终向Android系统中引入交易功能,让用户可以在应用内进行购买,帮助开发者赚钱。

优势犹存

开发者也认为,相对于苹果的严格控制,自由的Android平台的确是一个选择。Android开发者拥有更多的自由,可以对地址簿以及基本界面等手机本身的功能进行修补,而苹果却很少允许这种行为。不仅如此,要想进驻应用商店,任何应用都要经过苹果的审查,而谷歌则没有这种限制,完全依赖Android用户自己对恶意或侵犯性应用进行标记。

诺瓦克说:“你花好几个月编写的软件很可能会被苹果否决。对开发者而言,最大的奖励就是将软件尽快发布。相比而言,其他所有事情都是值得的。”

谷歌与苹果的另外一大不同在于,谷歌不会针对SDK(软件开发套件)向开发者收费。

开发者并未因为Android而彻底放弃iPhone。相反,他们表示,会逐渐将更多资源转向Android,以期通过这些努力获得回报。

他们还指出,相比于苹果应用商店30万款应用的规模,要想在Android的10万款应用中脱颖而出,更为容易。

“苹果应用商店已经拥挤不堪,而且已经饱和。”埃里克·迈拓伊斯(Eric Metois)说,他是一名独立科技咨询师,业余时间为iPhone和Android编写应用。

迈拓伊斯的首款iPhone应用iChalky配备了一个火柴人舞者。自2008年12月发布以来,该应用已经售出了30万份。但他开发的第二款名为Sparticle的游戏却没有获得这种成功。

“我花了500个小时在我的第二款iPhone应用中,但几乎一无所获。”迈拓伊斯说。在对为何推出Android版iChalky进行解释时,他说:“在另外一个新兴的平台上,iChalky有机会获得类似的成功。”

拓展更多设备

分析师表示,如果谷歌希望Android获得成功,就需要确保开发者不会对其失去耐心——尤其在新的竞争不断加剧之际,包括微软Windows Phone 7的发布,以及iPhone不可避免地在美国市场与AT&T以外的其他运营商展开合作。

鲁宾并不担心竞争对手阻碍Android的发展势头,因为他相信,Android今后将突破手机领域,并拓展到平板电脑以及其他一些尚未被设想出来的产品中。

“Android的前景并不限于一种设备,”鲁宾说,“我们将看到Android被用于一些未曾设想的设备。”(书聿)

http://tech.sina.com.cn/t/2010-10-25/12004785265.shtml