0. “面向对象”比你想象的要可贵多php
也许只有我有这种想法,不过我曾经觉得计算机科学课上学过的“面向对象”是很简单的东西。个人意思是,建立一些类来模拟现实世界能有多难啊?其实,那还真是挺难的。算法
十年以后,我仍然在学习如何合理地建模。我后悔之前我没有花更多的时间来学习面向对象和设计模式。优秀的建模技术对于每个开发团队都是很是有价值的。
1. 软件开发的难点在于沟通
这里的沟通是指与人的沟通,而不是socket编程。有时你的确会赶上棘手的技术问题,可是这种状况根本不常见。常见的问题在于那些你和项目经理之间的、你和客户之间的、还有你和其余开发者之间的误解。培养你的软技能吧。
2. 学会拒绝
当我刚开始工做的时候,我很是急切的想要去讨好别人。这也就是说,我几乎不能去回绝别人对个人要求。我加了不少班,可是仍是不能完成他们交代给个人全部事情。结果他们表示不满意,而我也表示要崩溃了。
若是你从不回绝别人,你的答应就显得毫无心义。承担能力所及的事情,若是别人不停地指派给你更多的事情,你须要明确的表示那意味着将会耽误其余的工做。
为了应付这种事情,我会随身携带一张列有待办事项的纸(To-do list)。当人们叫我去作什么事情的时候,我就给他们看这张纸,而且问他们我应该为他们挤掉哪一个事情。这是我用来拒绝别人的一种好办法。
3. 若是每件事都重要,那就什么事都不重要
咱们这一行,老是强调每种特性都是同等重要的,其实并非这样。敦促你的同事,让他们承担起工做。
若是你不强迫他们选择该作和不应作的事情,你会轻松不少。相反,让他们来为你选择你这周的任务。这会让你生产出来的东西变得最有价值。若是其余的部分都仍是乱糟糟的,至少你已经完成了最重要的。
4. 不要过分考虑问题
我能够站在白板前面一成天策划事情,可是这并不意味着事情会向更好的方向发展,这仅意味着事情将变得更复杂。
个人意思并非“你不该该去作任何策划”,只是若是我会在实现程序的时候会很快遇到我没考虑过的问题的话,那为何我不去尝试把它作好呢?像戴夫·法洛所说的,“魔鬼居住于细节中,而驱走魔鬼的方法是实践,而不是理论”。
5. 去钻研一些东西,但不要钻牛角尖
克里斯和我花费了大量的时间钻研SQL服务器的深层部分。那真的颇有趣,我也学到了不少知识,可是过了一段时间我意识到,知道了那么多的知识并不能帮助我解决业务上的问题。
举个例子:我知道在数据表层次,SQL服务器不会接受IU锁——它只会接受IX锁。这是一个性能调整,由于在大多数状况下,IU锁都会升级成IX锁。为了了解这些,我花掉了无数天作实验,我读了不少的书,还在会议上向微软的员工了解状况。然而我用过这个知识吗?没有。
6. 了解软件开发系统的其余方面
这对成为一个优秀的开发者是很重要的,可是若要在一个开发软件的系统中成为优秀的一员,你还须要去了解开发系统中剩下的部分在干什么。QA是如何工做的?项目经理在干什么?业务分析员在忙些什么?这些知识会让你与其余员工产生联系,并使你和他们之间的互动顺畅。
向你周围的人寻求帮助,以便学到更多的知识。有什么好书呢?大多数人都会为你的关注而高兴,而且很乐意帮助你。在这上花一点小时间会对你有很大的帮助。
7. 同事是你最好的老师
在我找到第一份工做的一年后,咱们和另外一所公司合并了。忽然之间身边就多出不少聪明又经验丰富的人。我深入的记得这是我感到多么自卑和愚蠢。我努力地学习,读了一本又一本的书,仍是仍是赶不上他们。我发现他们和我比起来有很是突出的优点。
如今,我不会由于和优秀的人一块儿工做而感到难受。我认为我有一辈子的时间去学习。我提出问题,而且很是努力地去了解个人同事们是怎么作出结论的。这也是为何我加入了ThoughtWorks。把你的同事们当作财富,而不是竞争对手。
关于学习,不管是哪一个行业,都是永恒的话题,正如 Jonathan Danylko在总结本身20年的编程经验时所说到,“诚然,总有不少你不知道的技术,你能够从中学习以保持不落后。若是你有一种灵巧的方式来获取你须要的新技术,那你天天都应该坚持学习。”(编注:ThoughtWorks是一家全球知名的IT咨询公司。)
8. 作出可用的软件是最终目标
无论你的算法有多酷,无论你的数据库模式有多棒,无论你的什么什么有多么多么好,若是它不能搔到客户的痒处,它就不值一文。专一于作出有用的软件,同时准备继续作出后续软件,这才是正轨。
9. 有些人真的不可理喻
在你身边的大多数人老是很优秀的,你向他们学习,他们也向你学习。共同完成一件事情的感受老是很好。然而不幸的是,你也有可能遇到例外。由于某些原 因,人可能会变得冷漠刻薄。精神萎顿的老板啊,满口谎话的同事啊,无知愚昧的顾客什么的。不要把他们看的过重。尽可能避开他们,尽可能把他们所带来的痛苦和影 响降到最小,但不要自责。只要你保持诚实而且尽力去工做,你就完成了你该作的事情。数据库