Posts published during May, 2011

浅尝Objective-C

今天下午,将那本翻了好久还剩一半的《Objective-C 2.0 编程快速上手》翻完了。全书232页,内容不算多,但是基本上覆盖了编程的各方面。或许你会说,这不就是那本经典的《C程序设计语言》的Objective-C版本吗?不,它不是。这本书虽然内容跟C那本差不多,页数也少不了几张(C那本是258页),但深度根本没法与C那本比——这也是我能够在两个小时左右内翻完一大半的原因。不过,即便如此,对于想学Objective-C的新手,如果有C语言基础的话,这本书还是非常值得读的。因为本书讲的非常详细,从开始时教你怎么在XCode里编写代码,怎么编译运行,到给出每个实例的完整代码甚至其运行结果。对于新手而言,它完全扫除了学习的阻碍。不过,美中不足的是,书中给出的代码片段也未免太多了,很有凑数字之嫌疑,读来让人感觉作者很啰嗦。

下面说说我对Objective-C和其Mac平台上的XCode开发工具的看法。

  1. 长这么大,用过这么多IDE,我觉得XCode是最优秀的。不说其它的,它那个非常智能的自动补全功能真的很赞——VIM可能要下很大的功夫配置才能达到这些效果,甚至还没这效果。
  2. 本想把这篇文章的题目取为《Objective-C是史上最垃圾的编程语言》,后来想想算了,懒得得罪人。为什么这么说?苹果的操作系统是公认的非常优秀的操作系统,而其设计也是在众多操作系统中最为出色的。而Objective-C则是该操作系统上拥有类似Linux系统上的C语言礼遇的语言,很多Mac OS X系统和iOS系统开发者以此以开发Objective-C程序为生。因此,随便说人家垃圾,最有可能的后果是,我被优秀的开发者认为垃圾——哦不,他们可能根本就不会在意甚至注意我对Objective-C的评价,只是笑笑。再说,我只是初次接触Objective-C,而世界上我还没接触过的语言多的很,何来史上最垃圾的语言只谈?
  3. 即便Objective-C评不上史上最垃圾的编程语言,我也不是很喜欢它。看看苹果优秀的界面设计,想想有人还说可能苹果会把Ruby当做Mac机器上的默认系统语言,我本以为Objective-C也会是很优美的。但我看过之后,发现它确实不美——至少在那些漂亮的设计和Ruby的阴影下,Objective-C显得不够美。为什么像类方法传递多个参数是这样定义的:-(void) setNumbers: (int) n1: second: (int) n2; 这里两个参数分别为n1和n2,int型,第二个参数的名称是second,也可以是其它任意的。这样的语法,我真的不太能够接受。为什么Objective-C非得要创造这些概念:分类、扮演和协议。定义不可变数组是NSArray类,定义可变数组是使用NSMutableArray类,初始化他们还需要写一个冗长的initWithObjects方法,初始化完后最后还得加上一个nil值,烦不烦啊?(好在有XCode,在大多数情况下都能自动补全任何变量、关键字、函数名、类名等等等等⋯⋯)

当然,我上面只说到了Objective-C不尽人意的地方,还是在看了一点点资料之后说的。事实上,Objective-C也有不少自身的有点。比如消息传递的概念,这相当于一次抽象。把对象调用其方法抽象成消息传递,把方法使用参数也抽象成消息传递。两个在其它语言里原本不相关的概念被抽象在了一起,简单实用。

总之,《Objective-C 2.0 编程快速上手》这本书只给出了很多实例,让你运行后知道得出什么结果,并没有深入解释为什么会得到那样的结果。所以说适合初学,但是光这本书肯定是不够的。我希望,随着学习和练习的深入,Objective-C能够改变我对它的看法,希望它在我眼中越来越美。

37signals这个公司,应该是很多程序员梦寐以求的地方。文章末尾这段长长的招聘帖,只为招一个优秀的UI设计师。抛开其优越的条件,光下面的文字就有很多地方吸引人:

  1. 招聘方态度异常诚恳。不像某些财大气粗的公司,即使明明要招人,也要表现的好像被招者必须求他们一样。对于技术公司,很多根本不懂技术的HR最牛了,他们看谁顺眼就要谁了。
  2. 把应聘方放到第一位。还是那些财大气粗的公司,他们只用简短的几句话说明要招什么人,能够完成什么工作的。此外,他们最多还会加上几句,告诉你最好能够友好相处,最好过了四六级(如果不是在招聘规格里要求的话),最好乐观向上等等等等⋯⋯但下面的招聘帖不像这样。它告诉你他们要招的是做什么工作的人,为什么你做的这些工作对用户甚至他们自身来说至关重要,你将和谁一起做什么工作得到什么样的锻炼等等等等⋯⋯除了必要的职责说明之外,一切都是以你为中心。
  3. 为求招一个人,愿意花时间来写一篇长长的文章,而且写的好。很多大公司,虽说也人才济济,但即使是专门负责招聘的HR部门,也不愿意好好整理下自己的招聘内容。很多情况下,他们列的只是一个list,上面列出一大堆外人不知道进去之后能做什么的职位。这样,他们招的只是一个作为完成特定任务的机器——说的更好听点,就是360老总周鸿祎眼中的打工者。如果求职者非得递上自己精心打磨的简历才有可能获得一份在大公司里可有可无的工作的话,那么,作为资源没那么多,没那么财大气粗的小公司,就应该为求职者递上一份自己的简历——一篇漂亮的招聘帖,作为吸引人才的至关重要的第一步。毕竟,小公司不能光招打工者。

Design matters

We believe you can’t be a great software company without great design. We believe in clarity, smooth user experiences, the right words in the right places, well organized and clean code, and all the little touches that make an interface feel just right. You should believe in these things too.

What you’ll be working on

Designers at 37signals are always working on different things. You may be working on polishing up an existing feature in Basecamp or designing the UI for a brand new feature in Highrise. You may be revamping Backpack or fundamentally rethinking some UI in Campfire. Or maybe you’re involved in designing a brand new product or a new marketing site. You may be asked to come up with something no one has ever seen before.

Besides having great visual taste and talent, you must code well-structuredHTML/CSS. Basic Javascript or Rails skills are a plus, but not required. Great writing skills are required.

Work on products that define an industry

At 37signals you’ll be working on products that people rely every single day on to get their job done. Your work will impact millions of interactions. You’ll be working with some of the best designers, programmers, dev ops folks, and customer support people in the industry. Our team is top notch and we want you to make it even better.

Solve real problems

Our projects are always focused on solving real problems. When the problem goes away we know the design is right. Your job, as a designer at 37signals, is to make our customers’ problems go away.

Be a leader

At 37signals, designers lead the teams. Each development team is made of up three people – two programmers and one designer. The designer also manages the project. In addition to designing the screens/elements, you’ll keep the team focused and make calls about what’s important.

What we’re looking for

We’re not looking for a certain design style, we’re looking for a certain design approach and taste level. Simplicity isn’t enough – clarity is where it’s at. You think about how people interpret the objects on the screen. What they think about, what moves them, what frustrates them, what makes them happy. You know that the right design decision can make all the difference.

You’re excited to discover a better solution, even well into a project. You don’t mind throwing something out in favor of a better idea or implementation. Projects at 37signals start with real code. Feedback from an evolving prototype guides the team. While we’re very pragmatic about code, it is important that your design/code is easy to change in response to feedback.

You love to write, too

You understand that copywriting is design. The words matter as much as the pixels. Great visuals with weak words are poor designs. You should care about how things are phrased as much as you care about how they look.

Chicago or anywhere

We’re open to hiring the best person no matter where they are. If you’re in Chicago all the better (we have an open desk for you in our office), but if not that’s fine too – more than half of our company works remotely all over the world. If you do want to relocate to Chicago we’re open to that as well.

How to apply

Send relevant work samples, and anything else that will make you stand out, to jointheteam@37signals.com. Include [UI DESIGN] in the subject of the email.

It doesn’t matter where you went to school, or if you even graduated. It doesn’t matter if this is your first job or your fifth. Doing great work and being driven to improve yourself and everything you touch is what matters.

If we think you may be a good fit we’ll be back in touch with step two of the application process.

Application deadline

We’ll be accepting applications for this position until June 6, 2011.

We look forward to receiving yours.

那帮混蛋

实验室网络连国门都出不了,更不用说其它的了。

好不容易托关系找到一个能够出国的服务器。我想通过它的ip和端口,在本机使用我在它本地建立的socks5连接。结果,搞来搞去,搞了我半天没搞定。

后来,我想到把哪台能出口的服务器当做VPN服务器,通过VPN连接那台服务器,再SSH上我国外的服务器。结果发现,我本机跟VPN服务器连上后也用不了。Shit,我忘了实验室把VPN禁掉了,很久以前就试过。

终于,我折腾累了,不想再浪费时间折腾下去了,那帮混蛋终于如愿以偿了,那帮躲在暗处的混蛋又在偷笑了。

不过,你们等着瞧,会有人来收拾你们的。

我在Tech2IPO写了些小文章。最近,我在写《假如有这么个应用》系列,希望鼓励大家分享的方式来充分挖掘互联网创意。

通过写这些文章,我交了不少朋友。Tech2IPO读者众多,各个年龄段从事各种职业的都有。自然,我交的朋友也是这样的。有些是没毕业的大学生,有些是刚毕业正在找工作的大学生,有些是工作了两三年甚至近十年在社会上小有成就创业者,有些是正在大公司干想利用业余时间搞出点东西的人。

不管是从事什么工作的,不管是什么年龄段的,不管是公司里的老员工还是新手,我都不惊讶。我惊讶的是,很多人在我告诉他们我是学生之后,居然很惊讶。

我最近很忙,写文章写的少,这些是以前的事情了。不过,最近我一直在想,难道我是学生你就怕了吗?难道你就怕我写的不够资格让你看吗?

为什么会害怕?我觉得主要还是很多读者太浮躁,一上来就希望看到切实可行的点子或者创业方向。这是,这跟我们的目标完全相反。因此,我觉得有必要聊聊自己对Tech2IPO这类资讯网站的看法,以及我作为其中的一个作者觉得为什么自己可以继续写下去的理由:

对资讯网站的看法

  1. 资讯网站的作用。Tech2IPO是一个TMT领域的资讯网站。TMT是什么?Technology,Media,Telecom。TMT产业是指Technology,Media和Telecom三者相结合的产业。资讯,讲求的是将信息快速独特的呈现给读者,使读者快速方便而全面的获取信息。
  2. 资讯网站无能为力之处。除了原创文章之外,Tech2IPO主要是从国外网站将英文内容编译成中文内容,将国外TMT领域的最新信息呈现给读者。这跟传统的记者报道是一样的,只不过更加“细分”。因此,除了将信息快速独特的呈现给读者之外,资讯网站本身并不能代替读者思考。当然,Tech2IPO平台所编译的英文内容本身很具有洞见,这是另外一回事。
  3. 读者该怎么看资讯网站。我是个信息狂,每天疯狂获取大量信息而兴奋。显然,信息的优劣对于我来说是有很大的差别的。但是,我并不能要求我所获取信息的渠道保证信息的优质。事实上,信息跟渠道本身一样,只不过是一个载体,只不过“渠道”传送的是信息本身,而信息传输的是思想。因此,要从任何资讯平台上获取有用的信息,关键是要对信息进行思考。
  4. 作者是否该被骂?你可能骂作者很垃圾。但是,我敢保证,任何一个稍微有点记者品质的作者所写的东西对你价值最大的一部分是那部分客观的东西,而非他的主观思想。事实上,除了客观信息之外,他附加上自己的主观信息是可以理解的。毕竟,不管对与错,这是他自己的思考。因此,当你骂作者很垃圾的时候,想想如果你来写,你能把他写成怎样?事实上,纵观各大资讯网站,能激起大家讨论的文章没几篇,能激起强烈讨论的更少。为什么?主要原因还在于作者在写作时加入了自己的主观看法。试想,如果一篇文章只是枯燥无味的报道一个即成的事实,那么很多人看过之后很可能不会去思考,更不会去讨论。很多讨论,都来自于作者主动抛砖。

为什么继续写?

我曾经以为,一个既没有经历过失败,更没有经历过成功的学生是没资格去写什么创业分析的。

  1. 积极思考的人过一生,行尸走肉的人也过一生,两者的最大的区别在于,前者过一生天天都不一样,而后者过一生每天都在重复一天。
  2. 我写文章,不是去教导谁该怎样怎样,我只是表达自己的看法——非常主观的看法。我的观点可能是错误的,但这毫不阻碍你自己去独立思考。事实上,我鼓励你去独立思考,就想鼓励我自己一样。
  3. 写作使我更容易思考。如果你的脑子一团混乱,又隐隐约约觉得自己有话要说,我建议你用WorkFlowy来记录,它能够让给让你脑中的想法渐渐变得清晰。

Mac下装软件很简单,大多数都是只需要下一个.dmg文件即可,简直比Windows下的大多数软件安装还方便。当然,安装XCode可能需要些时间,不过跟Windows下的软件一样同意并一直默认的点下去就像了,只是比VS的安装过程简单点。

不过,有些需要自己编译的软件有点麻烦。这也是Linux为什么不能普及的原因之一——黑客众多,他们贡献的开源代码也多,但是很多优秀的软件没有给普通用户一种便捷的安装方式。(当然,对于开发者来说,几行命令就能搞定的事情比傻瓜式的一只点下去方便高效多了。)

最近安装ZODB3,我就尝了点苦头。一直以为,自带python的Mac也跟Ubuntu一样,只需要sudo easy_install ZODB3就可以了。不过,我得到的结果是一直报错:

src/BTrees/_OOBTree.c:32: fatal error: error writing to -: Broken pipecompilation terminated.lipo: can’t open input file: /var/folders/kU/kUfzafCkGtiziiX9vJEXPU+++TI/-Tmp-//ccmK7d8b.out (No such file or directory)error: Setup script exited with error: command ‘gcc-4.2′ failed with exit status 1

一般情况下,我不会看错误是什么,直接把这些错误代码放到google上搜。一般都能找到答案。无奈,在Mac上安装ZODB3并出现此类错误的同学太少了,我找不到答案。这个问题我一直托着,每次安装的时候都去google搜这么一堆关键词,每次用一到两秒种扫一眼找不到答案我就果断放弃。

事实证明,这样下去我永远找不到答案。于是,今天我特意多花了几分钟时间,换了另一堆关键词,耐心点搜了下,果然有意外收获:python easy_install fails with “assembler for architecture ppc not installed” on Mac OS X。stackoverflow真是个好地方,好多技术上的问题都能在上面找到答案。这个答案告诉我,如果你的Mac系统是X86架构的,就可以这样安装ZODB3:

sudo env ARCHFLAGS=”-arch i386″ easy_install ZODB3

如果你的Mac是AMD 64位架构的,就可以这样安装ZODB3:

sudo env ARCHFLAGS=”-arch i386 -arch x86_64″ easy_install ZODB3

当然,用easy_install安装任何库出现类似问题时,都可以使用这样的方法,只需将上面的ZODB3改成你要安装的库就行了。