转自:
http://www.iteye.com/news/24637
所谓“隔行如隔山”,其实不然,在工作和生活中,大部分的知识和技能都是相通的。学会举一反三,对于技能的提升有很大帮助。本文是一名软件开发者从做技工的父亲身上学到的一些经验,而这些经验使他最终成为了开发者中的佼佼者。
以下为文章全文:
我的父亲是一名工程师——是机械工程师,不是软件工程师。在他成为机械工程师之前,他也做过技工和木工。他很聪明,同时在建筑和维修方面也很有天赋(只要不涉及到电气即可,不过那就是另外一回事了)。他甚至在60岁时依然能做围墙、工棚和甲板之类的工作。当我和我的兄弟还小的时候,他就开始让我们接触一些他工作用的工具,因此,当我们发现需要修复或制作一些东西时,我们有能力做好它。好吧,虽然他在我身上的教育几乎失败,但一路走来,我还是学到了很多重要的东西,而且,不管你信不信,这些我学到的东西,在我成为一名优秀的开发者和企业家的路上,让我受益良多。
下面就是我从他那里学到的知识。
第一课:三思而后行
砍柴是一个一次性的工作。只要树木被砍掉,它就不可能再保持原样。因此,很重要的一件事就是确保你每一次的删除操作是无误的。甚至即使你确定你的做法是正确的,也请你无论如何再做一次评估。重新检查你的评估,确保它正确无误,这样你就可以避免犯一些本可以规避掉的错误,付出的代价也要小的多。
开发产品也是同样的道理。如果事先不测量书架要占用的空间的大小,你怎能做出与之大小相适合的书架?如果事先不知道用户的需要,你又何必去开发一个无用的产品?这个道理已经提过很多次了,我在这里略过。但有个不被经常提及的事情是你的产品是一组功能的集合体,就像书架是一堆货架的集合体一样。每一个功能都应该被认真对待,细心评估,以确保它适用于受众人群。重要的是不仅仅在项目开始就收集反馈,在整个项目的开发阶段,我们都要重视反馈,而不是等到结束了,才想起还有一些不错的创意没有实现。
第二课:粉刷一座建造好的凉亭会很困难
有一次,几个工人在家里修凉亭,他们在凉亭建好后才开始粉刷。爸爸看到后指出,如果这些工人能在这些木头放在地面上就开始粉刷的话,他们就能节约1/10的时间,而且效果也会更好。粉刷之后只需做一些连接工作就可以很快的建造起这座凉亭。粉刷已经建造好的凉亭不仅又慢又不方便,而且还可能导致出现一些不易刷到的地方,最糟糕的是,如果不幸的话,还会把这一切弄得一团糟。
在产品的开发过程中,很容易忘记设计和UI,但这些很重要。以用户为中心的设计就是在设计页面时,以服务用户为第一要务,然后再开发相应的应用来支持这一设计。而以软件开发为优先并把设计放到最后,你将做更多的工作,产品也会存在潜在的缺点。UX应该是一个持续不断的过程,不是某个可以随意丢弃的东西。
第三课:让你的项目和工作空间始终保持整洁
在一个杂乱的环境中工作一定会让你的项目结果变得一团糟。如果碎木屑到处都是,你就不可能粉刷好;如果你的工具都满覆油污,你就不可能把拆散的发动机零件再组装到一起;如果你用完工具后不搜集整理好,你可能永远都找不到你想要的螺丝刀。任何一个机修工都会告诉你工作在一个整洁的环境中有多么重要。糟糕的不止是你将花更多的时间用于寻找放错位置的工具,还会导致更多的损失。
每一个开发者的代码中都可能会有一些bug。很多开发者都知道“代码债务”这个名词,它实际上只是从开发者的角度来看待这一块工作混乱的区域。如果你在源头埋下隐患,所造成的后果不仅仅是更难发现bug,而且在将来会更容易造成更多的混乱。最终你将不得不清理它们(特别是在你开始你自己的工作前,你将不得不去清理其他人留下的这些bug!)。想必每一个开发者都知道修改别人代码时那种恐怖的感觉,并会意识到他们留下了一堆麻烦等着你去解决。现在花一点时间去整理你的工作空间,将来你会节约更多的时间。
第四课:始终使用正确的工具(而且在你的工具上别吝啬)
搞砸工作的一个主要原因就是使用了不恰当的工具。这虽然显而易见,但很多人就是意识不到这一点。用错了工具后的下场通常是一个灾难。别心疼钱,工作一展开就应该找到合适的工具。
工具选用不当虽然通常都是管理层犯下的错误,但我们开发者也要为此事负责。毫无疑问,一个用了6年的笔记本运行起来肯定会很慢。即便为一款文本编辑器花了10美元,但却选用了最蹩脚的一款,也不会有助你的工作。节省的这几块钱不会帮你赢得客户的心。最糟的是,利用盗版软件帮你赚钱,这是完全错误的做法。今天你可能觉得你节省了一些,但在以后的运营中一定会花掉你更多的钱。找出最适合你项目的开发工具,然后花一些钱(除非它是开源的!)。当项目开始后,节约会特别具有挑战性。除非你需要,否则别乱花钱,但如果有些工具需要花钱才能使用,那就要选最好的。
第五课:如果方法都不奏效,那么去找一个更大的锤子
有时候你卡住了,这意味着你碰到了难题。有时候不管你多么用力,都无法将螺栓拧入螺孔中。有时候不管你多么用力敲打,钉子都不会被敲入。这时候你仅仅需要一把更大、更合适的锤子。
作为BugHerd的创始人之一,我过去常碰到一些本该寻求帮助的情况。但我挣扎着,我通读手册,看视频录像并参阅博客文章。然后我清醒了,并意识到无论我做什么,肯定有其他人在这方面做得比我好。目前,我们有2位精通JS的同事,他们做的工作,比我们任何时候做的都要好。有很多为远程团队协作而准备的优秀的工具,因此,不要找借口说没有合适的同事和你一起工作。有时候,你仅仅需要接受现实,并找到相应的解决办法。
作为一个活跃在专业开发设计社区里的创业者,我常感到像活在培养皿里。偶尔停下来,观察一些较为传统的行业,看看我们能从那些做出卓越贡献的前辈那里学到什么,这也是一个不错的做法。无论我们认为我们有多聪明,也不论他们有哪方面的优点,我们总是能从这些前辈这里学到很多。
分享到:
相关推荐
CSDN最早从2004年开始针对中国开发者进行大规模调查,是迄今为止覆盖国内各类开发者人群数量最多,辐射地域、行业分布最广的调查活动。该调查旨在全面和深入地了解中国开发者群体整体现状、应用开发技术以及开发工具...
鉴于最近很多人向我索要这本书的电子版,我决定将其上传到CSDN,以方便大家自行下载。全部免费,无需积分。不过如果大家觉得这本书对自己很有用处,还是建议去购买纸质版。这本电子书,我是购自淘宝网,其实我有纸质...
本文中提供下载的《WebRTC 零基础开发者教程》将以一个初学者的角度,从0开始逐步引导你掌握WebRTC开发的方方面面(当然,教程中更多的是操作性的内容,具体到技术原理和实现,显然不是本教程的讨论范畴)。...
### WTL开发者指南知识点梳理 #### 一、WTL简介 - **定义**: WTL (Windows Template Library) 是一个基于 Win32/64 API 的轻量级模板库,主要针对用户界面(UI)开发。 - **特点**: - 小巧、快速、不具侵入性。 - ...
微信公众平台开发者文档.pdf,很齐全的微信开发资料,想学习微信开发的朋友可以作为很好的入门资料。
在移动应用开发中,启动页(Splash Screen)是用户打开应用时首先看到的页面,它通常展示品牌标识、应用名称或者加载进度...在这个过程中,开发者需要考虑到性能、交互和视觉效果的平衡,从而打造一个高质量的启动页。
Black + Google开发者计划第一堂课的活动。 我的任务是使用模板使用HTML创建一个简单的网站。 我将背景更改为自己喜欢的颜色,并添加了我最喜欢的GIF之一,这也体现了我现在作为这个精彩的prgram的就职班同学的...
许多在计算几何学的普通操作(Operation)和空间数据处理在一个清晰的,一致的,完整的应用程序接口(API)是无掩蔽的。Java事务服务(JTS)是为了致力于能够支持确定性,清洁性,完整性和对空间数据进行查询的应用...
这个2.0版本的demo压缩包包含了一系列资源和文档,帮助开发者更好地理解和应用这个JavaScript库。下面将详细阐述其中的知识点。 1. **h5player.js介绍**: h5player.js是一个专门针对HTML5的视频播放器库,支持...
发布微信web开发者工具wxdebugger_0.1.0_x64
C#.NET Web 开发者指南教程是一份专为学习C#.NET进行Web开发的宝贵资源。这份教程结合了理论知识与实践案例,旨在帮助初学者和有经验的开发者提升技能,掌握C#.NET在Web应用中的核心概念和技术。以下是本教程可能...
中国电信物联网开发者平台是一个专为开发者设计的平台,用于构建和管理物联网应用。北向API是该平台提供给开发者用于与平台交互的接口,允许开发者将自己的设备数据上传至平台或者接收平台指令。本DEMO源码提供了对...
总的来说,PyQt5为Python开发者提供了强大的GUI开发能力,不仅易于上手,而且功能强大,可以满足从简单到复杂的各种界面需求。通过学习和实践这些资源中的例子,你将能够熟练地运用PyQt5创建出自己独特的、具有良好...
Android弹弹堂是一款深受玩家喜爱的休闲竞技游戏,其源码的公开为开发者提供了宝贵的参考资料,帮助我们深入理解Android游戏开发的技术细节。本篇将围绕弹弹堂源码,探讨其中的核心知识点,包括游戏引擎、图形渲染、...
“Delphi开发者资源社区”源码 V1.0 左轻侯 2001.10.9 Email:onekey@163.com <br> 社区地址:http://delphi.mychangshu.com <br> 个人主页:http://onekey.yeah.net <br> 本社区使用ASP+...
本压缩包包含了五款HTML5小游戏的源码,对于初学者或开发者来说,这是一个极好的学习资源,能够帮助理解和掌握HTML5游戏开发的核心技巧。 1. **HTML5基础知识**:HTML5是超文本标记语言的最新版本,引入了新的元素...
通过查看和学习这个Demo,开发者可以了解到如何在实际项目中整合uploadifive与.NET,以及如何处理图片上传的相关逻辑,比如大小限制、格式检查、文件命名规则等。 总的来说,这个插件和Demo涵盖了前端开发、HTML5新...
通过阅读和理解这些代码,开发者可以学习到如何将理论知识转化为实际的机器人控制系统,并了解如何在C++环境中处理机器人运动学问题。 总的来说,这个项目提供了实践6自由度机器人运动学正反解的宝贵机会,有助于...
通过学习和理解这些例程,开发者可以快速掌握STM32F103中UART4和UART5的使用方法,并将其应用到自己的项目中。 总结来说,STM32F103的UART4和UART5串口配置涉及硬件引脚选择、寄存器设置、波特率计算、中断和DMA...
总结,这个"必牛"[2D网络游戏引擎][第四课 图片资源编辑器(三)7]的教程是2D游戏开发者不可或缺的学习材料。通过深入学习,开发者能够掌握图片资源的高效编辑技巧,提升游戏的整体视觉质量和性能。