`

10年软件开发教会我最重要的10件事

阅读更多

1.“面向对象”比你想象的要难得多

也许只有我有这种想法,不过我曾经以为计算机科学课上学过的“面向对象”是很简单的东西。我的意思是,创建一些类来模拟现实世界能有多难啊?其实,那还真是挺难的。

十年之后,我仍然在学习如何合理地建模。我后悔以前我没有花更多的时间来学习面向对象和设计模式。优秀的建模技术对于每一个开发团队都是非常有价值的。

2.软件开发的难点在于沟通

这里的沟通是指与人的沟通,而不是socket编程。有时你的确会遇上棘手的技术问题,但是这种情况根本不常见。常见的问题在于那些你和项目经理之间的、你和客户之间的、还有你和其他开发者之间的误解。培养你的软技能吧。

3.学会拒绝

当我刚开始工作的时候,我非常急切的想要去讨好别人。这也就是说,我几乎不能去回绝别人对我的要求。我加了很多班,但是还是不能完成他们交代给我的所有事情。结果他们表示不满意,而我也表示要崩溃了。

如果你从不回绝别人,你的答应就显得毫无意义。承担能力所及的事情,如果别人不停地指派给你更多的事情,你需要明确的表示那意味着将会耽误其他的工作。

为了应付这种事情,我会随身携带一张列有待办事项的纸(To-do list)。当人们叫我去做什么事情的时候,我就给他们看这张纸,并且问他们我应该为他们挤掉哪个事情。这是我用来拒绝别人的一种好办法。

4.如果每件事都重要,那就什么事都不重要

我们这一行,总是强调每种特性都是同等重要的,其实并不是这样。敦促你的同事,让他们承担起工作。

如果你不强迫他们选择该做和不该做的事情,你会轻松很多。相反,让他们来为你选择你这周的任务。这会让你生产出来的东西变得最有价值。如果其他的部分都还是乱糟糟的,至少你已经完成了最重要的。

5.不要过度考虑问题

我可以站在白板前面一整天策划事情,但是这并不意味着事情会向更好的方向发展,这仅意味着事情将变得更复杂。

我的意思并不是“你不应该去做任何策划”,只是如果我会在实现程序的时候会很快遇到我没考虑过的问题的话,那为什么我不去尝试把它做好呢?像戴夫·法洛所说的,“魔鬼居住于细节中,而驱走魔鬼的方法是实践,而不是理论”。

6.去钻研一些东西,但不要钻牛角尖

克里斯和我花费了大量的时间钻研SQL服务器的深层部分。那真的很有趣,我也学到了很多知识,但是过了一段时间我意识到,知道了那么多的知识并不能帮助我解决业务上的问题。

举个例子:我知道在数据表层次,SQL服务器不会接受IU锁——它只会接受IX锁。这是一个性能调整,因为在大多数情况下,IU锁都会升级成IX锁。为了了解这些,我花掉了无数天做实验,我读了很多的书,还在会议上向微软的员工了解情况。然而我用过这个知识吗?没有。

7.了解软件开发系统的其他方面

这对成为一个优秀的开发者是很重要的,但是若要在一个开发软件的系统中成为优秀的一员,你还需要去了解开发系统中剩下的部分在干什么。QA是如何工作的?项目经理在干什么?业务分析员在忙些什么?这些知识会让你与其他员工产生联系,并使你和他们之间的互动顺畅。

向你周围的人寻求帮助,以便学到更多的知识。有什么好书呢?大多数人都会为你的关注而高兴,并且很乐意帮助你。在这上花一点小时间会对你有很大的帮助。

8.同事是你最好的老师

在我找到第一份工作的一年后,我们和另一所公司合并了。突然之间身边就多出很多聪明又经验丰富的人。我深刻的记得这是我感到多么自卑和愚蠢。我努力地学习,读了一本又一本的书,还是还是赶不上他们。我发现他们和我比起来有非常突出的优势。

现在,我不会因为和优秀的人一起工作而感到难受。我认为我有一生的时间去学习。我提出问题,并且非常努力地去了解我的同事们是怎么做出结论的。这也是为什么我加入了ThoughtWorks。把你的同事们看成财富,而不是竞争对手。

关于学习,不论是哪个行业,都是永恒的话题,正如 Jonathan Danylko在总结自己20年的编程经验时所说到,“诚然,总有很多你不知道的技术,你可以从中学习以保持不落后。如果你有一种灵巧的方式来获取你需要 的新技术,那你每天都应该坚持学习。”(编注:ThoughtWorks是一家全球知名的IT咨询公司。)

9.做出可用的软件是最终目标

不管你的算法有多酷,不管你的数据库模式有多棒,不管你的什么什么有多么多么好,如果它不能搔到客户的痒处,它就不值一文。专注于做出有用的软件,同时准备继续做出后续软件,这才是正轨。

10.有些人真的不可理喻

在你身边的大多数人总是很优秀的,你向他们学习,他们也向你学习。共同完成一件事情的感觉总是很好。然而不幸的是,你也有可能遇到例外。因为某些原 因,人可能会变得冷漠刻薄。萎靡不振的老板啊,满口谎言的同事啊,无知愚昧的顾客什么的。不要把他们看的太重。尽量避开他们,尽量把他们所带来的痛苦和影 响降到最小,但不要自责。只要你保持诚实并且尽力去工作,你就完成了你该做的事情。

分享到:
评论

相关推荐

    英语面试常见问题回答.doc

    例如:“我毕业于XX大学,主修计算机科学,拥有X年的软件开发经验,特别擅长Java编程和数据库管理。” 2. **What are your greatest strengths?** 强调与应聘职位密切相关的技能或特质,如:“我的最大优点是解决...

    team geek英文原版

    《Team Geek》是由Brian Fitzpatrick和Ben Collins-Sussman共同著作的一本关于软件开发团队中的人际交往与合作模式的书。这本书的重要性在于,它不仅仅关注软件工程师的技术能力,比如掌握编程语言、编译器、调试器...

    Python程序员案头必备:《Python参考手册 (第4版)》(高清.书签.英文完整版)

    本书是权威的Python语言参考指南,内容涉及核心Python语言和Python库的最重要部分。本书内容简洁扼要、可读性强,书中还包括了一些没有在Python官方文档或其他资料中出现过的一些高级的主题。 这一版在内容上进行了...

    IDA Pro权威指南

    上个世纪90年代中期,当IDA Pro的开发者Ilfak Guilfanov和我决定离开共享软件领域,转向专业市场时,我并没有预见到,10多年后,IDA会在IT安全领域扮演如此重要的角色。但是,当IDA赢得市场份额后,我们多次听到用户...

    C语言程序

    在计算机科学中,C语言是一种强大的、高效的编程语言,它被广泛应用于系统编程、软件开发、嵌入式系统等各个领域。本文将深入探讨两个C语言程序示例,涉及数字组合、奖金计算以及完全平方数的查找。 首先,【程序 1...

    2011.06 - Java语言程序设计-进阶篇(原书第8版

    10. 开发工具和环境:最后,进阶篇也可能简要介绍Java开发中常用的一些工具和环境,如集成开发环境(IDEs)、版本控制(如Git)以及构建工具(如Maven或Gradle)。 以上这些知识点构成了Java语言程序设计进阶篇的...

    如何像python程序员一样思考

    《如何像Python程序员一样思考》是一本以Python语言为讲解工具的计算机科学导引教材,旨在帮助初学者快速掌握编程思维,理解数据结构与算法,并熟练运用面向对象的方法进行软件开发。本书不仅适用于希望学习Python...

    C++编程思想第二版第一卷英文版

    Bruce Eckel作为MindView公司的总裁,在软件开发领域享有极高的声誉。本书的英文原版相较于中文翻译版更能够准确传达作者的真实意图与深刻见解。 #### 二、书籍特点与价值 1. **深入浅出的讲解**:本书不仅是一本...

    Thinking in C++(英文版)

    这是我书架上最常使用、最值得信赖的书籍之一。” - **IEEE Computer**:“这是程序员真正能用得上的东西。” #### 六、结语 《Thinking in C++》以其详实的内容、深入浅出的讲解风格以及实用的案例分析,成为了一...

    XML高级编程

    首先也是最重要的,本书覆盖了万维网协会(W3C)整理编撰的XML的全部基础内容。W3C是以正统方式发明XML的标准主体并在不断开发XML的规范。虽然有越来越多的XML社团在不断涌现并提出崭新的超出W3C控制之外的与XML相关...

    推荐C++教程

    书中不仅教授了C++的语法,更重要的是教会读者如何像一个C++程序员那样思考问题。对于想要深入了解C++哲学和设计原则的读者来说,这本书是一次思维的洗礼。 ### 12.《Run Time Polymorphism in C++》 虽然给定文件...

    国际化国家代码 ISO 639

    ### 国际化国家代码 ISO 639 #### 概述 ISO 639 是一项国际标准,用于制定语言名称的代码表示方法。这项标准由国际标准化组织...这些代码对于全球化软件开发、国际交流、数据库管理和语言学研究等领域具有重要意义。

Global site tag (gtag.js) - Google Analytics