阅读更多

132顶
7踩

行业应用

原创新闻 10年软件开发教会我最重要的10件事

2011-06-13 09:21 by 见习编辑 jobbole 评论(67) 有27241人浏览

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

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

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

  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. 有些人真的不可理喻

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


  原文:Andres Taylor  翻译:敏捷翻译 - 蒋少雄

来自: www.jobbole.com
132
7
评论 共 67 条 请登录后发表评论
67 楼 心杀心 2013-01-15 15:25
若要在一个开发软件的系统中成为优秀的一员,你还需要去了解开发系统中剩下的部分在干什么。
这个确实需要。
66 楼 fgh2011 2012-05-11 15:18
说得好
65 楼 useryouyou 2011-06-19 22:11
good word!
64 楼 njl_041x 2011-06-18 15:24
很有启发啊!!!
63 楼 fjjiaboming 2011-06-17 21:39
0. “面向对象”比你想象的要难得多

对学的或是想学的,正在用的都是难.

对于不了解的简直是魔鬼, 也是对牛弹琴.
62 楼 jerry 2011-06-17 12:02
你看这是0-9,呵呵
61 楼 foyoto 2011-06-17 09:53
感觉不错,学习了!
60 楼 Teok 2011-06-17 00:00
箴言。
59 楼 EXvision 2011-06-16 23:37
感觉javaeye上喷子越来越多了,CSDN来的么?笑
58 楼 iaimstar 2011-06-16 17:00
好吧

我承认lz说的我都懂并且都做到了

是不是有点装的嫌疑?
57 楼 smxly53 2011-06-16 13:37
一看很像软文啊。说的都是大白话  
56 楼 hellolaojiang 2011-06-16 13:30
前面我还觉得很不错,直到遇到这个词 “ThoughtWorks”
55 楼 bbbbb1202 2011-06-16 11:17
受教了,学习
54 楼 weileniweilewo 2011-06-16 09:38
挺你,这对于我这个刚刚踏入社会的人来说,这无疑是一笔宝贵的财富
53 楼 object_object 2011-06-16 09:35
说得很好,特别9. 有些人真的不可理喻。深有体会
52 楼 newvirus 2011-06-16 08:52
细节决定一切
51 楼 bat0906 2011-06-15 21:46
这几条说的很符合实际中的工作~~ 确实在工作中遇到过这样的问题~~~~

这个不得不要顶~~~~~~~~~~~

         
50 楼 rmn190 2011-06-15 20:51
深刻!字字珠玑!
49 楼 //ghost 2011-06-15 20:16
受教了,学习
48 楼 YZ_EYE 2011-06-15 17:20
整体上还是可以的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • clipp:CLI参数解析器库

    短片 Scala的功能命令行参数解析器和用法信息生成器。 有关更多信息,请参见。

  • 在C/C++代码中使用SSE等指令集的指令(1)介绍

    我们知道,在C/C++代码中,可以插入汇编代码提高性能。现在的指令集有了很多的高级指令,如果我们希望使用这些高级指令来实现一些高效的算法,就可以在代码中嵌入汇编,使用SSE等高级指令,这是可行的,但是如果对汇编不太熟悉,不愿意使用汇编的人来说,其实也是可以的,这就是Compiler Intrinsics(http://msdn.microsoft.com/zh-cn/site/26td21ds)。

  • 计算机系统: SSE 浮点运算详解,超级全面!!!

    SSE是英特尔推出的SIMD(单指令多数据流)扩展指令集,最早出现在Pentium III处理器上。它引入了128位寄存器XMM和一组针对浮点运算优化的指令。SSE指令提供了丰富的功能,包括基本的浮点运算、向量化运算、数据加载与存储等,大大提高了浮点运算的效率。目前,SSE已经发展到第4代(SSE4),并在各类应用中得到广泛应用。

  • 使用SSE指令集来优化程序

    SSE和SSE2的指令系统非常相似,SSE2比SSE多的仅是少量的额外浮点处理功能、64位浮点数运算支持和64位整数运算支持。 SSE为什么会比传统的浮点运算更快呢?因为它使用了128位的存储单元,这对于32位的浮点数来讲,是可以存下4个的,也就是说,SSE中的所有计算都是一次性针对4个浮点数来完成的。 虽然SSE从理论上来讲要比传统的浮点运算会快,但是所受的限制也很多,首先,虽然它执行一次相当于四次,会比传统的浮点运算执行4次的速度要快,但是它执行一次的速度却并没有想象中的那...

  • Server-Send-Event (SSE) 技术在单服务多实例副本上的实现

    在项目迭代的过程中,有些业务场景,比如客户端(浏览器)需要定期的获取后端的数据,一般比较常规的方式是通过客户端 long polling 的方式。除了这种方式外,还可以通过 Server-Send-Event(SSE)或者 WebSocket 的方式,更加实时的获取后端的数据。SSE是流式单工的(服务端 -> 客户端)基于 HTTP 协议 (很重要)适合客户端监听,服务端主动推消息的场景,如获取日志信息,获取通知消息等WebSocket是流式双工的(服务端 客户端)

  • SSE(Server-Sent Events)技术及其简单演示

    SSE(Server-Sent Events)是一种用于实现服务器主动向客户端推送数据的技术,也被称为“事件流”(Event Stream)。它基于 HTTP协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端的实时数据推送。

  • 快速FastPosChar算法(Delphi SSE优化算法应用之一)

    应群友cjc要求改写了一个poschar的快速算法,实测速度比系统自带pos要快500%以上,这些都是归功于sse指令集发挥的作用。function CGPosChar(Ch: Char ; SAddr: PChar; SLen: Integer): Integer; // Ch -> AL; SAddr -> EDX; SLen -> ECXasm push esi test ecx, ecx jz @notfound test e

  • SSE技术和WebSocket技术实现即时通讯

    服务器发送事件SSE(Server-Sent Events)是一种基于HTTP的单向通信机制,用于实现服务器主动向客户端推送数据的技术,也被称为“事件流它基于HTTP协议,利用其长链接的特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端实时数据推送。WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议。它是 HTML5 中的一种新特性,能够实现 Web 应用程序和服务器之间的实时通信,比如在线聊天、游戏、数据可视化等。

  • SSE指令的形式

    流式单指令多数据扩展(Streaming SIMD Extension,简称SSE),不同形式: 1. 垂直计算形式 在垂直计算形式的SSE指令中,X和Y寄存器被看成一个向量,包含多个标量数据,每个标量数据分别运算,这也是SIMD指令最常见的计算形式。 2. 水平计算模式 在水平计算模式中,两个操作数均来自同一个源,而不像垂直计算形式,两个操作数来自于不同的源。 3. 标量计算形式 SSE指令还支持标量的运算方式,如下图所示:只有x0和y0进行操作,其他的元素保持不变。

  • 从编译到执行,C++如何开发SIMD友好的代码?

    一:名词解释 Flynn分类法 Flynn于1972年提出了计算平台的Flynn分类法,主要根据指令流和数据流来分类。按照Flynn分类法,计算平台共分为四种类型。 1.单指令流单数据流机器(SISD) 2.单指令流多数据流机器(SIMD) 3.多指令流单数据流机器(MISD) 4.多指令流多数据流机器(MIMD) 标量处理器 标量处理器是一...

  • SSE推送技术

    SSE超简单的推送方案

  • 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试

    下面是一个简单的测试SSE指令性能的程序,可以看到明显的性能提升。 (说明:程序中的timing.h使用的是http://blog.csdn.net/gengshenghong/article/details/6973086中介绍的时间间隔获取方法) #define WIN #include "timing.h" #include #include #include #define

  • Web即时通信技术 -- SSE(Server Sent Event)

    SSE是一种可以主动从服务端推送消息的技术。SSE的本质其实就是一个HTTP的长连接,只不过它给客户端发送的不是一次性的数据包,而是一个stream流,格式为text/event-stream。所以客户端不会关闭连接,会一直等着服务器发过来的新的数据流。 原理 SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。 SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。 SSE 默认支持断线重连,WebSocket 需要自己实现。 SSE 一般只用来传

  • sse浮点运算优化实例

    这是一个浮点运算的sse优化实例 c++,计算速度提高4倍

  • 基于SSE指令集的程序设计简介

    Intel公司单指令多数据流式扩展(SSEStreaming SIMD Extensions)技术能够有效增强CPU浮点运算能力Visual Studio .NET 2003提供了对SSE指令集编程支持从而允许用户在C代码中不用编写汇编代码就可直接使用SSE指 令功能MSDN中有关SSE技术主题[1]有可能会使不熟悉使用SSE汇编指令编程初学者感到困惑但是在阅读MSDN有关文档同时参考下Intel软件Software介绍说明书(Intel Software manuals会使你更清楚地理解使用SSE指令编程要点

  • 在C/C++代码中使用SSE等指令集的指令(3)SSE指令集基础

    相关参考: http://edu.gamfe.com/tutor/d/11820.html http://blog.163.com/chenqneu@126/blog/static/45738484200781392836677/ http://dev.gameres.com/Program/Other/SSEjianjie.htm http://www.vckbase.com/d

  • SSE技术详解:一种全新的HTML5服务器推送事件技术

    为什么80%的码农都做不了架构师?>>> ...

  • HTML5 SSE(服务器推送技术)

    Spring mvc服务端消息推送(SSE技术) SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,再向服务端发送请求,周而复始。 注意:因为EventSource对象是SSE的客户端,可能会有浏览器对其不支持,但谷歌、火狐、360是可以的,IE不可...

  • 一文读懂SIMD指令集 目前最全SSE/AVX介绍

    SIMD指令集 SSE/AVX 概述 参考手册 Intel® Intrinsics Guide Tommesani.com Docs Intel® 64 and IA-32 Architectures Software Developer Manuals 背景 1. 什么是指令集 所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重

  • SSE入门

    我们将在本文中介绍如何在C++/C中使用SSE指令。我的目的不是用SSE写尽可能快的程序,而是试图讲明白它的使用方法。

Global site tag (gtag.js) - Google Analytics