比如说:如果一个人日常很容易和人产生冲突,但脑子很好使,也能静下心来钻研技术。
这种情形大致上应该努力找一家技术路径长的公司做技术,否则可能会人际关系紧张。
而与此相反,一个人如果技术能做的还不错,也愿意与人沟通,
同时已经身处一家技术路径不是很长的公司,并不太能够换工作,那么就很可能需要尽早转向管理方待审核向。
- 通用的领域知识
- 编程语言(C/C++,Java,C#,Python,Perl,PHP等)
- 框架和类库(Struts,Spring,OSGi的某个具体实现,MFC,Boost等)
- 平台(Windows API,POSIX,.Net Framework※1,Java API,C/C++ Runtime Library等)。
- 恰如Jeffry Richter所说,大多时候可以从内存机制、线程机制、错误处理、异常处理、组件构建、组件组合等方面来进一步考察一个平台。
- 计算机体系结构(CPU指令,虚拟存储等)
- 数据库
- 实用技巧(调试方法,代码生成器等 )
- 概念和逻辑创建和优化
- 面向对象分析和设计/结构化分析和设计
- 设计模式
- 重构
- 契约式编程
- UML
- 专业领域知识
- 图形图像算法
- 网络协议
- 人工智能
- 数值/非数值类算法
- 财务知识
- 负载均衡
软件间接知识:
- 需求开发和描述
- 估算
- 估算法。比如,COCOMO, FP等。
- 估算术。比如,使用计数等原始办法。
- 软件工程和方法论
- 轻量型方法论。比如敏捷。
- 大方法论。比如CMMI
- 综合分析。《人月神话》,《人件》
================================================
- 精通一门最常用的语言
- 了解一个最常用平台的基本机制,比如:内存管理、线程机制等
- UML图和面向对象分析设计方法
- 设计原则,如:职责单一等
- 设计模式
- 《代码大全》里讲的一切
- 精读一个知名的,但有点规模的程序。这点上要感谢开源项目给我们提供了这么多优秀程序。但要谨防好高骛远,动辄挑战Linux内核,精读是关键。
- 累积一定的代码量,比如:独立的完整做过一个数万代码行的东西。这里的关键是完全自己打造,一定不要拷贝粘贴。
- 掌握基本算法和数据结构(可以不自己写,但至少要知道其复杂度和区别)
- 养成一种清晰的编码风格
- 有自己的专业(金融、高并发网站,图像处理,TTS等)