原文链接: https://dsx2016.com/?p=719微信公众号: 大师兄2016
非器非术非道,仅聊聊一些方向.
分阶
很多事物都可以按进度和阶段来划分,如程序员的小白,初级,中级和高级.
但是这种层次之分也有内外之别.
公司招聘的中高级职位取决于业务的能力需求和薪水发放的高低,是市场的宏观定义.
个人的中高级之分在于自我的能力进阶,来源于技术但不仅仅限于技术,有多个维度综合衡量.
先有分阶,才有进阶.
学会分阶,找到自己当前的定位,了解自己的长处和不足,才有下一步.
高级
高级,优秀之类的词汇是一个很抽象的概念.
以可量化的事物来描述,一些描述高级程序员的答案:
- 工作经验
5
年以上 - 可以快速写出一些常见的算法
- 能独立开发框架和库
- 出版过技术图书
- 带领团队完成项目
一次面试的流程不足以表现高级所在,一次协作的失误也不能表明才不配位.
共同
层级之分为纵,差异之别为横.
不论程序员的职位和技术栈如何,总有一些共同的地方.
就如前端开发和后端开发:
- 在版本管理和协作上,
Git
和Svn
是必知必会,其他的不在考虑范围. -
debug
调试和面向搜索引擎,定位和排除问题也是技术能力之一. - 大到硬件,鼠标/键盘/电脑椅,小到细节,文档/注释/命名,还有周报和会议.
这些能力是基础.
即便是基础,可调节的空间仍然造成十分巨大的差异.
调试能力80
分的人工作效率往往是60
分人的几倍甚至十几倍.
其他的以此类推.
但是在纵向扩展上,一般到80
分就要考虑适可而止,因为往后加1
分,付出的时间精力和收获不一定成正比.
共通
只学习一门语言可以胜任常规业务的需求,多学一些语言,有助于扩展思维的边界.
但凡你了解过两门以上的语言,你就会发现,语言之间有很多共通的地方.
汉语和英语,python
或java
,不外如是.
注意,是通,不是同.
如编程语言,它们共通的地方:
- 都有变量,函数,或者类
- 都有数据类型,字符串,布尔型,数字等
- 都有数据结构,堆栈,队列,数组,链表等
- 都有设计模式和算法
甚至于一些常见的条件控制,循环语句,逻辑运算,模块等都是大同小异.
了解原理和思想后,几乎只剩下语法不同,或者语言独有特性的差异.
进阶
在进行纵横扩展分析后,进阶方向仍然比较模糊.
站在高处的人一眼就能全览低处的风景,但是低处望高处,通常是一叶障目,难易窥探全貌.
回到可量化的高级,什么是别人具备而你没有的.
以下是一些临时的整理:
- 面向面试编程,在拥有业务能力的基础上,好好的表达自己,内要高级,外也要高职高薪,市场定义很重要.
- 面向技术编程,语言的学习很抽象,也很简单,按部就班即可,从编程基础到设计模式再到数据结构和算法,主要核心在于了解和学会.
- 面向业务编程,学会和会用是两个场景,业务远比学习要复杂的多,打通面试和学习两关,才能开始业务,如何学以致用是关键.
- 面向效率编程,上三个是基础,现在才是进阶,快是企业的制胜之道,也是个人的工作之道,在90%的层面,如何更快是一个大方向.
- 面向质量编程,效率和质量有时候互斥,有时候互联,这才是最考验技术能力的地方,一个代码片段既可以快又好,也可以慢又差.
没写过框架和库,没了解设计模式就不是高级开发了吗?
会数据结构和算法就一定是高级开发吗?
高级开发工程师频繁使用if else之类的就是才不配位吗?
凡是以点概面的,请慎而远之.
量化
生活中很难证明你的能力或者自我了解.
刷题不代表什么,刷的多了一样也全知全会.
面试不代表什么,面向面试编程的多了去.
工作不代表什么,完成任务又不是秀代码.
一些临时的整理:
- 工作年限,时间越久,越是身经百战,时间长久本身就是一个筛选值,大公司履历和职位高低也是筛选值.
- 开源项目,内部的代码不方便展示,但是开源的代码面向全世界,不论是自己开发,还是参与知名开源项目,高质量代码是基础,基于
github
的时间线,也是不同时期技能能力的佐证记录. - 知名博客和出版图书,出版社是一个筛选值,销量取决于读者,也是一个筛选值,博客的浏览量
10万+
,基于类似公众号的时间也是一个筛选值,书籍是知识体系系统,博客是技术成长路径.
能够量化和分析的,一定是基于分享和面向公众的,还有依赖于第三方作为筛选值.
- 基于时间线,
github
和公众号的发布时间无法更改,每一步记录不同时间的变化,展示的是代码层面的细粒度. - 基于市场数据,工作年限,职位薪水,公司层级,产品量级,都是基于商场如战场的真实数据.
- 基于平台,出版社,开源组织,技术大会,在线教育,新媒体等,知名品牌都有会自己的一套筛选机制.
外有一套,内有一道.
清楚的了解内外定位和进阶,平衡取舍之道,才是王道.