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

作者Jeff Standen,有着21+年经验的软件开发者。

首先开发spike解决方案——这是我早期敏捷/极限编程所养成的习惯之一。spike解决方案是一次性原型,可以帮助你在投入大量时间和精力之前验证你是否走对路。

区别就在于原型,因为你遵循这样一个规则,在你完成研究之后,你最终会扔掉“spike”代码。所以允许你偷工减料,迅速行动,因为它不会出现在产品或代码审查中。

此方法有助于迅速发现设计的哪些部位尚不明确,而不必过早地尝试架构或设计决策。

致力于小而连贯代码块的版本控制——通过类似CVS/Subversion,每次提交都直接发送到服务器。做部分文件的提交并不简单。

随着Git的出现,只提交较大文件的若干行代码变得很容易,并且可以在push到远程代码仓库之前先本地rebase/merge提交。

有一次,我在工作于更大功能的时候,采用了小型增量提交,我的工作效率直线上升。这样做能够清空我的大脑以便于面对更重要的事情。

经常写代码—— 最近,我正工作于:一个基于Web的企业协作和自动化平台(PHP / MySQL),一个基于云的实时指标聚合器和使用循环哈希(Node.js/ Redis)的API,一个面向iOS app商店(Swift/ SpriteKit)的棋盘游戏,专门的基于URL的cronjob可替代基于web的SaaS服务(JAVA),等等。

用过大量框架和语言有助于我的抽象和算法思维。

我从工具,如Eclipse RCP、Tapestry和Hibernate中学到了很多伟大的经验教训,并用到我的PHP项目里。尤其是在2000年初,在有Java特征的企业生态系统用于PHP存在之前。我从Unity3d/C#学到了很多关于网络和面向消息的架构。

如果我只坚持单一平台和社区的话,就永远不会知道这些概念。

编写简单的代码——我以前习惯于写复杂的代码以作为对自己的挑战。而现在的挑战是要编写优雅且简单的代码——到一种每个人都觉得他们也能做到的地步(即使他们不能)。简单代码通常来自于若干次复杂代码的迭代。

引用Antoine de Saint Exupéry的话就是:“不是没有什么可添加,而是没有什么可消减的时候,才算是达到了完美。”

这也使得我们在长时间休止之后返回项目,以及鼓励其他人参与进来变得容易多了。

最后优化——我们很容易掉入试图比用户或计算机更聪明,并且预优化各种边缘情况的陷阱。关注帕累托法则(80%的效果来自于20%的工作)。写代码,运行代码,当必要的时候专注于最大的瓶颈。这也支持保持代码库的简单。

说“不要首先优化代码”并不意味着“编写粗糙的代码”。代码总是应该精益和优雅,没有必要画蛇添足,不要将一整天的时间用在挤压剩下的10%,但其实已经能够工作良好的一些东西上。不但工作效率会下降,而且还会引进更多复杂性,解决方案变得不那么可归纳,等等。

着眼于“最重要的事情优先”——总是有一些项目领域比其他的更有趣或更具挑战性。工作于那些有趣的东西总是比工作于那些必要的东西更有诱惑。

在攻克重要部分时,将有趣部分作为一种调剂,也就是说,两者都做一点也是可以。

因 此,光从这一点上说,将大的问题分解成小问题的理念是不言自明的。每个人都懂。所以,我会通过计分若干“quick wins”来开启我的一天,这能让我更有冲劲和更专注(“quick wins”可以是任何东西,包括有趣又小型的挑战),然后我会首先冲向“最重要的事情”。

了解全栈——当我刚开始干这一行的时候,没有什么比等别人做完他们那部分东西,然后我才能继续我那部分工作更糟糕的了(设计师,后端人员,前端人员,数据库人员,服务器人员,等等)。

于是,当我2000年创办自己的软件开发公司的时候,我做了一个明智的决定,那就是涉猎全栈。我知道我不可能擅长所有东西,也不可能是最后唯一对所有一切负责的人,但我想要做终端到终端的原型,因为我没有耐心看过程。

每当我需要的东西触碰到我不懂的领域时,我会研究它。于是乎,我学会了服务器管理,数据库管理,设计,前端/后端开发,云架构等。

通过了解其他领域是做什么的,我才能写出包含它们需要的代码。

当然,其中的一些要点似乎并不是所谓的“小习惯”,但我向你保证,它们是小变化历经20年时间导致的结果。重要的行为变化并没有意义,更多的是关于我是如何频繁地练习这门技术(在过去10年时间中每年大概4000-5000个小时)。

所以,我的做法更像是去回答这个问题:“什么样的小习惯会导致更糟糕的软件和低效的生产力?”,然后反过来。

作者Ed Prentice,软件工程师

时间是宝贵的,所以要尽可能地节省时间。尽可能自动化。一旦时间成为一种商品,那么你可以实现下一个伟大的创新。

使用功能强大的IDE(如vim),并将其配置能为你做尽可能多的事情。力争单个命令Build/Test/Deploy/Run。

如果你发现自己常做某件事情,那么可以让它们在一个按键下发生,或者一次点击下发生。或者更好的是,让它们自动发生。

了解键盘快捷键和UNIX命令行。几乎所有的IDE都可以让你运行复杂的编译命令,甚至任意的终端命令——不但强大,并且可以为你节省大量的时间。

提问题,然后提更多的问题。如果有什么你不明白的事情发生了,那就问为什么。然后走开,研究替代方案,并提出来。一直问问题直到你可以详细地给下一个问为什么的开发人员解释。我时常感到奇怪为什么会有这么多开发人员不知道为什么,仅仅是因为觉得“它总是/曾是这样”。

通过提供更好的替代解决方案挑战现状——并且制定步骤实现。如果你的测试不完整,或每天/每周运行一次——那么成为本地的Continuous Integration大师——目的是为了有利于你的团队,并实现它。一旦你使用它并且它可以帮助你更好工作的话,那么让你的团队也使用它。

不要只是挑战别人,挑战自己。从来没有写过web应用程序?那么写一个。从未用过Python?用Python劫持无人飞行器。

拥有一些东西。创造一些东西。没有必是非要做技术项目,可以是一个事件,例如聚会或编程马拉松,也可以是一个游戏,一个网站,一个博客。

教一些东西。Java,公开演讲,写作,下棋,vim,网球。

成为一个杰出的人。拿到一个垃圾类/组件?修复好它。编写代码的正确途径。不在代码中走捷径。做出明智的决策,向你周围的人说明为什么你要做这个决定的利弊。总是改善代码。制定不需要花费1小时的待办事项表?Just Do It。

浏览你熟悉的Stack Exchange的话题——例如你喜欢的语言。当你发现什么新的东西的时候,尽快末位淘汰相关知识。知道C语言?什么是分支预测?这篇文章会告诉你——你要做的就是学习。

浏览你不熟悉的Stack Exchange的话题——好好学习,天天向上。

学会沟通。书面文字,呈现展示,解决问题,小却激烈的小项目,大型团队,小型团队。

文档化你的所有过程。你可以回头查阅你为什么做这些事情,以及依赖原先的解决方案去解决碰到的相似问题。这还有助于捕捉你可能会忘记的思维过程和关键的信息片段。我经常通过日志来回顾前几天的工作。

在你写之前文档化你的代码。使用系统图,类层次结构,流程图表,以展示说明你的代码将如何工作。如果有人提出建议——是的,他们会提出来的——那么你可以进行修改,这比已经写好了代码再去修改要容易得多。这是另一个我很少看到有人会做但却有着最负面影响的事情。

特定化。为新的东西制作图表,向大家展示。收集尽可能多的细节。确保每个人同意这个图表。如果有人提出了建议,那就补充/添加更正到图表。保持图表更新。

知道潜意思的偏见和男性特权。了解你是哪种MBTI和人格类型,并且更重要的是,要知道如何与其他性格类型更好地互动。了解情商。每个人都是不一样的,你需要知道如何与他们进行最有效和最有建设性的交互。

定期为团队做一些事情。带饼干。教魔术。培育一点文化,并鼓励其他人也这样做。赞美其他人的贡献。一支有凝聚力的团队是很难被击败的。

学习如何与人合作。我个人非常喜欢《The Pragmatic Programmer》的“stone snop”。

理解和使用别人的代码。如果你正在实现自己的XML解析器或或csv阅读器或git hook,那么你就是在重新发明轮子。

一 旦你写了代码,并且它是有效的,通过测试的,那么回过头去整理一下吧。重新运行测试。再整理。每个类都应该有单一的职责,每个函数都应该只做一件事情。在 大多数情况下,函数应该小于20行代码的长度。使用自文档的函数名和变量名。花时间整理你的代码以后将会10倍地回报给你和你的团队。

参与其中。承担责任。如果事情有不对的地方,那就解决它。如果最后期限临近了又想出了一个解决方案,那让其他人尽快知道。任何人都可以做到这一点,即使是最初级的开发人员。这要求对项目的蓝图,方向和截止期限有着大局观的认识——参与进来。保存好每天的工作内容!

和团队分享学到的经验教训(在适当的时候)。指出Java中finally块内部抛出异常的时候发生了什么?和大家一起分享。


出处:码农网

英文原文:What little habits made you a better software engineer?

转载于:https://my.oschina.net/wuut/blog/724759

让你变成优秀程序员的几个小习惯相关推荐

  1. 优秀程序员都有哪些编程习惯?

    要成为一个好的程序员,我们应该遵循一些易于采用的好习惯. 作者 | John Au-Yeung 译者 | 苏本如,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中, ...

  2. 优秀程序员和普通程序员都是怎样过完一天的

    (点击视学算法公众号,可快速关注) 普通程序员的一天,可能是这样的. 早晨到公司,想一想今天有哪些事情需要处理.打开记事本,按照上面的要求的任务一条一条开始做. 昨天项目经理说,客户对聊天模块的文件传 ...

  3. 优秀程序员都会关注的公众号

    程序员的价值绝对不在于技术本身,而在于做出好用且好看程序的能力. 程序员常有,优秀程序员不常有. 成为优秀的程序员是极其困难的,并且这个过程不可能一蹴而就. 你是不是也立志做一名优秀的程序员呢? 据说 ...

  4. 优秀程序员应该做的几件事【转】

    为什么80%的码农都做不了架构师?>>>    下面是一些优秀程序员应该做的几件事,当然这只是建议,每个人都有不同的生活和学习方式,以下提供的几条也仅供参考. 程序员每天该做的事 1 ...

  5. 成为优秀程序员需要具备的15种编程技巧

    来源 | https://www.linuxmi.com/chengxuyuan-15-jiqiao.htm 编程是一个告诉计算机如何工作的术语.通过编程,我们可以轻松操作任何技术.就像所有人在特定地 ...

  6. 【伯乐在线】程序员常有,优秀程序员不常有

    本文由 伯乐在线 - 青劲草 翻译自 www.quora.com.未经许可,禁止转载! 欢迎加入:翻译小组,通过 翻译频道 贡献一份力量. [伯乐在线导读]:本文源自 Quora 问答贴<为何没 ...

  7. 成为优秀程序员的方法就是抛开编程?

    原文:How To Become a Better Programmer by Not Programming 作者:Jeff Atwood 我在2006年写过一篇题为"Programmer ...

  8. 优秀程序员的秘密|宝贵经验分享

    源作者:Edmond Lau 来源:程序师 更新整理:极客重生 优秀程序员是稀缺的,你只要问大厂面试官:你们还招人吗,他肯定会说:一直在招人,为什么会一直在招人呢,HC真的有那么多吗?真实情况是,面试 ...

  9. 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

    优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能.编程语言中,数组是一个非常重要的概念,也是一种很常用的类型.本文中通过javascript语言的代码实例,展现编程中数组的魅力.在javasc ...

最新文章

  1. oracle存储过程、声明变量、for循环|转|
  2. 4图纸 rust_看完这篇,国外的图纸也能看懂
  3. C#直接用数字定义背景颜色
  4. 201521123030《Java程序设计》 第2周学习总结
  5. HtmlUnit解析动态网页并采集网页列表到Excel
  6. java bitset_Java BitSet nextClearBit()方法与示例
  7. CSS3 移动端开发技巧
  8. 毕业季offer怎么拿?收下这份非典型求职面试指南
  9. C# 数据类型转换
  10. 2580 php to yuan,PHP版汉字转拼音类-ASCII版本 | 学步园
  11. java如何配置环境变量_java如何配置环境变量
  12. html添加java代码_在HTML中插入JSP代码
  13. acm:C语言程序设计:求圆柱的体积等,去除小数点后两位最后一位的四舍五入
  14. mysql免安装迁移_Mysql 免安装配置并迁移数据库
  15. 七上八下猜数字_[转]适宜导游在旅游车载途中讲述的故事及互动游戏合集
  16. 破解物联网落地困境-阿里云硬件接入最佳实践
  17. [计算流体力学][Ansys Fluent] 使用 Fluent 计算方腔热对流和卡门涡街
  18. 【参赛作品71】CentOS 7.9 安装 openGauss 2.1.0 之剥茧抽丝
  19. 记录一次mongoDB错误 errmsg: cannot use the part () to traverse the element
  20. 期末作业成品代码——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. 餐饮外卖平台小程序 v1.0.1
  2. 精仿B站源码+自动采集360视频
  3. 原生Java高仿抖音短视频APP双端源码
  4. Node.js Domain 模块
  5. golang安装grpc,timeout问题
  6. centos7 安装MyCli MySQL 客户端
  7. kobject_create_and_add解析
  8. 配置keepalived+LVS_DR
  9. 【AI视野·今日CV 计算机视觉论文速览 第210期】Tue, 1 Jun 2021
  10. Java—一篇读懂java集合(Collection/Map)及Lambda表达式