程序工程师经验谈

心态

  • 不能浮躁
    • 先思后问
    • 先自己动手
    • 少形式(概念)多行动
    • 关注细节
    • 学且持
    • 专注:做基础技术的专家
      • 我们坚持选拔一流的人才,坚持做一流人才的乐土,坚持我们的技术理念,专注地去做集团最需要我们去做的事情,持续钻研,不断提升我们的技术能力。希望将来,核心系统的每一个人走出去,都能够成为各个领域的资深专家。
    • 服务:做业务问题的解决者
      • 不能够应用于业务的技术不是好技术。为此,我们必须更加强调我们的服务意识,去贴近和了解业务,学会从业务使用者的角度来考虑技术问题,真正深入到业务之中去,解决好业务问题和需求,会让我们的服务和产品更有竞争力和生命力。这对我们来说非常重要。
    • 创新:做技术创新的领跑者
      • 技术创新可以创造更大的价值。创新从哪里来?需要从我们做业务问题解决者的敏感嗅觉中来,从我们的专注精神、过硬的技术能力中来。我们要不断挑战自己,做别人做不了的事情,我们一定会是最有技术活力的团队!
  • 急不来
    • 需要学与能够学的东西很多
    • 时间有限
    • Eg: Android的整个系统,需要对整个领域有认识,不是1~2年可以的。
      • Linux Kernel
      • JVM
      • Android Framework
      • IPC
  • 多多交流
    • 与人
      • 对人生的看法,娱乐类的事情
      • 生活话题
    • 同行业
      • 行业现状
      • 发展趋势
    • 同工作
      • 解决方案
      • 经验
        • 业务
        • 工作
        • 生活
    • 同事
      • 如何完成工作
      • 如何应对困难
      • 工作方法
  • 幽默
  • 乐观
    • 庆祝自己的每一次成功
  • 谦虚
    • 任何事情没有那么简单
    • 承认自己并不是最顶尖的程序员-知不足。
  • 三思
    • 估算解决问题所需要的时间。为自己定一个时间限制。
    • 避免形式主义
      • 不要过于注重程序的“设计模式”。
  • 警戒
    • 消极、软弱无主见、虚伪、对前途渺茫、混乱无序、怨由心生、虚伪做作、学习时间少、无规划性、代码质量低、手忙脚乱、技术永远停留在“打铁”水平、术业无专攻、低调、迷茫、心态不稳、思想徘徊、生活困难、开发难度大、维护难度大、压力大、难沟通、不满、被动、拿不起放不下、进退两难。
  • 如何增加收入
    • 先要替公司赚到钱,承担责任,一个员工才能拿到钱。
    • 一个方向,是转向关注业务。具体说来,包括成为产品经理,或称为对产品需求负有责任的技术兼业务高手。
    • 第二个方向,是作为技术领导,将自己的技术与管理结合起来,提升整个团队的战斗力。
  • ToBeACreator
    • 理想:Create a thing to change the world
    • 平时: Thinking, discussing, Create, study
    • 关注: 算法与结构、新产品、新工具
    • Care: 架构、优化、成本、格局

本事

  • 设计
    • 经验
    • 方法
    • 专注于细节
    • 表达
      • 沟通
        • 多说“是”,少说”不是“
          • 明确架构师的职责,给出如何构建的方案
          • 所考虑的替代方案
          • 项目风险(以及可能的规避策略)
          • 基于的假设条件
          • 需要指出的突出问题
          • 清楚解释你说“不”的原因
        • 特殊场合才说“不”
          • 特定环境,和公司策略不符合
          • 无法完成,或者优先级不够高
          • 给出原因
        • 抑制想自卫的冲动
          • 等待,接受别人所说的话
        • 倾听建议来改善合作
        • 理解别人与自己沟通的目的
        • 才思敏捷的回答别人的问题
          • 关注是谁在问问题
          • 想出三点解释,如果可能的话,包含一条支持这些解释的商业根本原因
          • 如果对方要求你做出某个决定,暂停并思考你所说的话对单位的影响
          • 如果你的答案有消极影响,要展示别的答案也是“有问题”的
    • 前瞻性
  • 管理
    • 进度控制
    • 项目预测
    • 并行处理
    • 风险管理
  • 扩展
    • 发展趋势
    • 研发
    • 革新
  • 编程
    • 编程语言是一种语言,随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处 。最重要的,让语言去适应项目,反之亦然。
    • 经常备份代码。
    • 不断学习
      • 技术
      • 思维
      • 习惯
    • 提携新人
      • 分享
      • 传授
    • 重构
      • 检查
        • Rule of three 称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化"。
      • 回顾
    • 编写文档
    • 测试
    • 编码
      • 可用
      • 可读
      • 可改
      • 无错
      • 优雅
  • 别让任何人绑架你的工作节奏
    • http://www.iteye.com/news/26663
    • Tips
      • 预估工作周期
      • 理解你没写过的软件的功能
      • 把复杂的问题简单化
      • 把复杂的问题分解成若干个小问题
      • 调整代码,为迭代预留空间
      • 发现并修复漏洞
      • 上述问题与其他成员协作完成
      • 如果你直接和你的用户交互,还有更多的建议
        • 把用户需求翻译成改进计划
        • 深入浅出,把复杂的意思用简单的方式向用户传达
        • 明晰每一个尚待解决的问题
    • Important
      • 但是在这些职责之上,最重要的是在了解目标用户的基础上设定目标
      • 不能让别人的期望凌驾于你的创作自由之上。你必须自主把控这个创造的流程。
      • 在软件开发的过程中,你才是那个决定什么时候达到什么目标的人。
  • 架构师
    • 软件架构师应具备的十大特点
      • http://www.iteye.com/news/29681
        • 看了这些信息,个人感觉与架构师还差距很大,另外在移动互联网时代的开发,需要的架构就更加平面.
          • 目前没有对行业的把握
          • 没有机会做具体的业务
        • 如何解决
          • 将目前做的事情系统化,实例与产品化
            • Android ROM
          • 借助语言与完整开发一个项目中涉及的各步骤,进行体系化学习
            • API
            • 完整构建
            • 多平台
      • 了解相关领域的技术知识
        • 在你想要成为架构师的相关技术领域,必须具备扎实的专业知识和过人的本领。
      • 超强的分析、设计能力
      • 编码与验证性测试(POC)
        • 熟悉该组织整个技术栈,并能使用各层的技术熟练地编码。 能快速实现验证性测试。
      • 架构设计的实力
        • 能为原始需求提供架构方案。
        • 考虑周全:工具和框架的采用、安全性、性能和扩展性、依赖关系、集成、效益。
        • 熟悉软件开发生命周期(SDLC):需求、分析、设计、测试、打包、部署。
      • 建模语言或工具
        • 能使用不同的建模语言或工具,向其他架构师、开发者、项目经理等人,阐述架构。
      • 架构框架
        • 能证明架构的可行性,包括其业务、应用、数据、基础设置方面。 了解TOGAF和ZACHMAN框架就更好了。
      • 沟通能力
        • 能与开发人员、测试人员、商业分析师、上级经理沟通无阻,无论在口头上和书面上。
      • 布道
        • 能讲解该行业的市场、技术知识。 能为全队提供培训课程。
      • 销售、甚至售前
        • 能参与售前工作(尤其对于软件服务业):制定技术方案、使用各种预算工具估计方案的规模和成本、与销售对象互动。
      • 演讲技巧
        • 优秀的演讲技巧,有助于以下活动:华丽的计划书和技术文档、PPT演讲、布道。

职场人的习惯

  • 个人目标
    • 别指望谁能推着你走
      • 从依赖变为独立
    • 忠诚于自己的人生计划
      • 个人修炼
    • 选择放弃什么更难
  • 企业目标
    • 绩效
      • 正确处理,积极应对
    • 价值观
      • 理解积极的一面
  • 社会目标
    • 远离角斗场的时代
      • 共赢
    • 换位思考的沟通
      • 为他人着想
    • 1+1>2
      • 集思广益

tags: Review

成长

  • 时间
    • 目前的工作
    • 深入业务细节
    • 对整体的影响
    • 对整体的把握
    • 利用其他资源
    • 整合资源
    • 节省资源
  • 形式
    • 从小到大
    • 从局部到整体
    • 从开发人员到产品设计/架构师
    • 不要泛泛、要想想
    • 定位个人成长,争取方向早成
  • 一名程序员十年技术之路的思考与感悟
  • http://www.iteye.com/news/29541
  • 学习成长、合作共赢、总结呈现、思考前行
  • 技术成长
    • 1.借助导师、同事资源。这样可以让自己快速解决遇到的问题,少走很多弯路。
    • 2.系统化的学习工作所需要的是基础知识,而不是到百度或谷歌查资料解决。
    • 3.除了工作中需要的新知识外,建议在工作一段时间后再回头系统性学习相关专业基础知识。
    • 4.借助平台学习成长。
      • 与项目共成长
    • 5.如果可以对自己进行细分定位会更好。
      • 结合自身情况以及工作需要,对自己有一个更加细分的定位,这样做精力才能聚焦, 更有可能快速在你所做的领域不断深入,进而成为专家。而如果你想要成为一个综合性的人才,也可以考虑通过阶段性专注于某一细分领域,重点学习积累,具有一 定深度后再切换重点关注领域。
  • 随着经验的增长,从精兵变成骨干,我们所从事的工作会逐渐由简单直接变得复杂综合且无法独立完成,这时候就需要团队协作甚至跨团队、跨部门推进。这个时候就需要我们很好地协调平衡各方资源,推进项目达成目标,并将团队的业绩最大化展现,获得肯定。在这个过程中,要注意以下几点。
    • (1)保持开放的心态。
    • (2)找到一些对大家都有帮助,大家又都感兴趣或可以学到新东西的事情。
    • (3)注重成果总结和展现。
    • (4)注重平时的资料积累。