一般会经历几个阶段
1. 编写漂亮的代码,某个段代码写的很漂亮,算法很OK,对库用的很熟练和巧妙,逻辑很给力。
2. 追求面向对象的写法,或者特定模式,认为这个就是流行。
3. 对设计模式有所了解,开始写出维度拆分合理,交互简单的代码。
4. 眼界开拓,设计开始考虑可以不同的库,OS底层模型,数据库选择还有操作方式等等。
5. 开始组件化思考,构建更多的组件来完成特定的功能。
6. 系统化的思考问题,开始搭建不同进程或者工具来构建一个系统。(更大的组件化)
7. 对技术的热爱,还有工具化、自动化的文化的认可和热衷
8. 分布式的思考。考虑更多的非功能性需求,比如上量了,failover,容错,扩容等
9. 更多不同行业和硬件的搭配,更大的系统化思考问题。你的系统应该怎么运行的,用什么方案,模型如何,哪些用设备来实现哪些用开源,哪些自行开发等。
对软件程序员来说,这些事情应该依次了解的
1. 数据结构:数据结构,基本的算法,算法的数量级差别
2. 操作系统:多任务系统的(进程,线程,协程,应用程序域,Task是怎么回事,有啥区别,什么情况下用?该不该用?)、进程间的通讯方式、内存区
3. 设计模式 gof
4. 常用的一些库的了解
5. 多读些和当前项目相关的优秀开源代码,学习库的使用,还有开拓一些设计上的理念。
6. 架构模式
7. 不同的系统,不同行业的知识,不同的应用场景,他们都有不同的关注点、开发模式和开发准则(数据库原理,Mobile开发,架构开发,Web开发,还有一些平台化的产品在不同应用场景下的做法和思维)
8. 多沟通,还有是对这个行业的热情。
一般来说,弄1~5,可以往专家方面转行了或者往公司资深员工方面或者管理发展(对业务和公司平台了解,另外可以通过人脉协调不同部门一起顺畅做事)。
整体要求
眼界和分析非常重要,比如chrome和ie6市场占有率为啥突然变化那么多。是因为很多浏览器shell(比如遨游,360之类的切换了引擎,由IE6改成chrome),还例如db的不同引擎的区别和使用场景。
对业务和系统的理解,早期关注的技术细节。后面就应该关注业务和系统。
发展方向
横向:通用化,抽象化,简化,配置化的,结构化的走
垂直:业务深度化,点化深度,特殊算法(比如视频,音频,识别,处理等等)