03.18
如果你在招聘程序员,你应该给他们 200 美元/小时。这样一来,很多其它任何方法都无法解决的难题都变的很容易。比如解决你的人才招募问题,保证你只有在真正需要的时候才去招募程序员。
期望问题
200美元/小时完全的阐明了你的期望。它是在说,你期望招募到这个领域里既专业又专长的人。
作为一个程序员,我面对这 200 美元/小时的劳动合同,拿它跟 65 美元/小时的合同相比,我会在 2 个关键方面表现的不同。首先,我会更加迫切的解决出现的问题和需求。如果在我休假的时候接到一个电话,客户要求一个新的功能。我会马上返回宾馆,立即开始实现它;高额的回报使我很容易向家人解释我的这种表现——事实上,她会完全的支持我这样。如果我的薪水只是普通水平,我绝对不可能表现成这样,因为不值得。也许我会因此丢了这份工作,但 65 美元/小时的工作到哪都能找到。
其二,对于一个打工仔来说,这实在是一笔丰厚的收入,我绝对不会把自认为的“学习”时间计算为工作时间。如果你付我 200 美元/小时,我只会收取按这个领域里一个专家的工作时长的报酬。我想,可能情况各有不同,但大部分的程序员都应该按这种规范行事。例如,我接手了一个项目,需要写出大量的底层的C代码。我已经有 10 年没写过C程序了。我会花每天 16 小时重新拾起我的C技术,但这些时间我绝对不会向客户收取报酬。我也绝对不会为修改任何一个成熟的程序员不该产出的 bug 所消耗的时间向客户收费。总之,这些将会占用我一半时间的事我都不会收取费用。
忠诚问题
但你猜怎么着?我完全不会向客户抱怨这些。事实上,我会很高兴这样,客户也同样高兴。我快速的擦亮了我生锈的技能,他们也重视我的工作,他们得到了符合需求的、及时的、符合预算的产品。
而当下一次客户需要什么东西的时候,他们会毫不迟疑的把我放在他们优先级的最高位。他们会因此得到更迅速的开发,更高的质量,因为我只需要给我的C语言除锈一次,我不会再重复先前的错误,我比别人更加了解他们的业务,以及他们自己都还没想到的功能特征。
你也永远不会再担心程序员会离你而去。如果你有大量的工作交付给他,他会接受,会把大量的剩余精力投入到工作中。如果你每周只有少量的工作交给他,他们将会很安逸的生活,享受他们的业余时间。这是一个双赢的局面。
一个社会层面的提示,高报酬伴随着高技术含量,相对于律师、医生等其它行业,程序员在这方面体现的更加明显,因为,其它那些行业报酬普遍比较高的原因是他们人为的限制这些行业的从业许可证的数量——他们是被强行的推上高收入的行列。但如果你给一个程序员很高的报酬,这没有任何的强迫因素。这是对价值的认可,这种认可会使忠诚心自我发酵。
信任问题
对于员工来说,一旦你给了他高额劳动合同,信任就已经不是个问题了。如果他不能按时提交,开了他。如果他提交了低质量的代码而不改正,开了他。如果你对他有任何的不满,开了他。
而面对一个报酬很少的程序员,你很难做出这种当即辞退的决定。你会试图做成本/收益分析——你会怀疑这个程序员有些懈怠了,但你仍然期望他能编写出好的代码。这是一个致命的错误。首先,地球上没有第二个地方能比雇员和老板之间的信息不对称更夸张的地方了。程序员可以编篡出他们能想到的任何童话,你不会有任何的机会揭穿他们的诡辩。第二,无效率、发牢骚的程序员并不是零,他们是负的。他们是能摧毁你的公司的大大的负面因素。
优化资源分配
如果你付不起 200 美元/小时,你就不该聘请程序员,因为你面对的是一个巨大的无效率的市场问题。
哪一种情况你更喜欢:投资 10 万收回 20 万,还是投资 100 万收回 5 千万?这几乎是一个不言自明的问题,但事实上所有的程序员聘用都陷进了第一种类型里。几乎所有的 IT 部门、大部分的老板都选择了错误的投资类型。这是一种巨大的资源不合理分配,因为在第二种类型中有大量的机会。
当你把目光集中到第二种类型后,很多的愚蠢的商业问题都会迎刃而解。你不需要再紧巴巴的控制工资预算和开支。进度延迟将不再是个问题,甚至不再出现。团体士气会高涨。
从另一方面讲,如果你把把程序员的报酬从 65 美元/小时提高到 75 美元/小时,这会破坏招聘市场上的经济次序,这是一种不稳定的状态。上面所提到的矛盾都会恶化,你会在这种微观经济迁移中滑向破产,或被抛弃。
摘自:博客园
1. 只做需要做的工作 Only do the work that needs to be done
2. 站在巨人的肩膀上 Build on the shoulders of giants
3. 了解数据结构和算法 Know your data structures and algorithm
如果你不知道什么时候应该使用快速排序、不懂辨认O(n2)程序、不会写递归函数,你将无法成为 10 倍效率的开发者。使用多种语言你才能清楚不同的框架是如何解决相同问题的。尽可能去了解底层命令(plumbing),以便能够作出明智的决定(Web 框架是怎么存储 session 状态的?Cookie 到底是什么?)。
4. 不要怕买工具,它可以节省你的时间 Don’t be afraid of buying tools that save you time
Ben 说:“昨天我花 50 美元买了一个位图字体工具,它帮我节省的时间成本绝对超过 200 元。”
5. 集中注意力 Find focus
不要整天开着你的电子邮件、Twitter、Facebook 等,在工作时将它们最小化或关掉它们,戴上耳机。Tiny hack 说:“即使不听音乐我也戴着耳机工作,这样便不会有人打扰到我。”
6. 尽早并且经常性地进行代码重构 Refactor early and often
有时,你不得不放弃漂亮的代码转而去寻找真正对项目有用的代码,但没关系,如果你的现有项目中有这样的代码,最好的方式便是不要看它,并重构。
7. 只管去做 Just do it
将你的业余项目分享到 Startup Weekend 中。在我开始转到 Unix 和 Ruby on Rails 上之前,我买了一台 Mac,使用 Windows 虚拟机花了一年时间做 .NET 项目。
8. 挑选一个编辑器,并掌握它 Pick an editor and PWN it
高效开发者喜欢用文本编辑器胜过 IDE 编辑器,因为这样可以学到更多东西。无论什么情况,尽量使用键盘快捷键,因为熟练使用一件工具的前提是熟悉它。
在选择编辑器时,认真考虑并挑选最好的(Emacs 或 Vim),因为它们是通用的。其次,挑选你的首选平台最支持的。使用宏,不断地写代码;使用 Mac 上的 TextExpander 为整个段落创建快捷方式;使用 Visual Studio 或 SublimeText 的自动补齐功能;使用支持按行/列分割窗口的编辑器,这样你便能同时看到单元测试和代码(或模型、视图)。
一定要想清楚后再写代码。Adam 说,“我有朋友在一个大项目组里工作,他们组里最高效的程序员是一个高位截瘫用嘴叼着棍子敲代码的人,他总是在写代码之前想得很仔细且很少出错。”
9. 整洁的代码胜过巧妙的代码 Clearness beats Cleverness
要想让其他人能够读懂你的代码,尽量使用最少的代码来完成任务。遵循 DRY(Don’t repeat yourself)的原则,使用明确定义的对象和库,将任务分解成小而简单的代码段。
10. 潜意识是强大的工具 Your sub-conscience is a powerful tool
离开 10 分钟往往就可以解决一个问题。控制编程时间,给自己一个多姿多彩的生活,劳逸结合能让你在工作时更高效、更愉悦。当然,即便是上了年纪的程序员也知道,以最少的时间完成最高效的工作是成为 10 倍效率开发者的必要条件。
作为一个程序员,我觉得在职业生涯中最好的一件事儿就是从电脑前站起来,去拜访那些在某一领域有所建树的人们。
11. 推动自身和团队进步 Refine your process as a team
重视批评,以包容的态度接受批评并提升自己是非常重要的事情。没有这个基础,你不可能成为一个高效的开发者。一位智者曾经说过:“聪明的人善于从自己的错误中学习,而智慧的人善于从别人的错误中学习。”
2011年即将结束,2012正在靠近。你是否在专业领域给自己设定 2012 的目标?不管你的答案如何,我相信下面列出的 11 条建议里面总有一两条适合你 :)
1. 使用 Twitter – 如果你是一名程序员,如果你还没有使用 Twitter,你就 out 了。不是说你有多少粉丝,而是在 Twitter 上你可以更快的得到问题的答案,获取你关注的话题的最新资讯。 (作者没有考虑到天朝的程序员们)
2. 经常阅读 StatckOverflow – StackOverflow 是提问编程问题最好的地方。即使你没有账号,它也值得你去浏览,学习。(良好的英文阅读能力是程序员的必要素质,哈哈!)
3. 开始写博客 – 我认为每一位开发者都应该写博客!因为博客可以记录我们学习进步的轨迹,可以让别的开发者参考。写博客让你和别人更多的交流。还有,写博客可以提高你的技术社区的知名度。
4. 参加线下活动 – 从你的“shell”里面走出来吧,多参加线下的沙龙、活动、会议。和别的开发者交流可以让你在这个领域建立自己的人脉网络,这对你在这个领域的成长很有好处!
5. 使用现代化的智能手机 – 作为一名开发者如果你还在使用老土的山寨机,你得赶紧升级了。我还记得有一次跟一个经理聊天的时候,他得走回座位才能给我发邮件,我就在想“这哥哥是做 IT 的吗?”。正如有些行业你必须开好车,穿亮丽的衣服一样,我们干 IT 的就应该站在技术、硬件的前列!
6. 拥抱移动互联网 – 移动互联网的大潮才刚刚开始。你不仅需要知道如何为 iPhone, WP7, Android 开发应用,你也需要学习如何创建可以在任何一台移动设备上运行的网页程序。
7. 学习至少一种设计模式 – 我无法告诉你应该学习哪个设计模式,但是你至少得学习一种。我个人倾向于 MVVM,因为我是 Sliverlight/WPF/WP7 开发者。
8. 每年设定可行的目标 – 创建一个简短的列表,记录你下一年想要完成的目标。同时你也应该按照季度来检查目标的完成情况。你可以用 Gmail Reminder 来提醒你自己~
9. 学习不同的编程语言 – 简单来说,学习新的语言可以拓宽你的视野,可以让你对计算机和编程语言是如何工作的有更深的了解。“如果你只有锤子,那么所有的问题在你看来都只是钉子”。
10. 增强自信 – 很少有程序员对自己很自信。如果你觉得你哪里弱,那你就去增强那里。互联网上有大量免费的资源可以让你学习各种只是,弥补你的弱项。
11. 阅读博客,技术书籍、杂志 – 你读过几本编程书籍?杂志呢?我相信一名好的程序员每年至少阅读 5 本编程书籍。不读书怎么进步呢?
英文原文:11 Things every Software Developer should be doing in 2012.
来自: 开源中国社区