爆栈之旅:软件开发人员的分级、职业发展路径等

疑惑

受微软(亚洲)首席研发经理邹欣老师的邀请,为其《构建之法》的学员作业提供一个个人见解,某学员在作业中提出了几个问题:

  • 国内目前对初、中、高级工程师的评价是否有严格标准?比如个人代码行数?代码质量?
  • 关于五个职业态度:临时性的寄托或者工作===>工作===>职业===>投身的事业===>理想的呼唤,
    • (1)五个职业态度的等级是渐进的嘛?是否可以跨越式提升?比如从第三阶段直接跨度到第五阶段?
    • (2)第三阶段即“职业”阶段,所描述的“职业道德”具体指什么?去年著名的阿里用脚本抢月饼时事件中当事人的行为算不算违反了职业道德?

我在这里尝试一下提出我的一点见解。

职业生涯

路径

一般的技术生涯的路径是:

  • 开发人员:初级程序员、中级程序员、高级程序员、小头目(Team Lead/Tech Lead)、首席开发人员(Principle Developer)
  • 架构师:应用架构师(Application Architect),系统架构师(System Architect),企业架构师(Enterprise Architect – EA)
  • 技术管理:研发经理、高级研发经理、技术副总(VPE)、CTO

这些我都在《爆栈之旅》课程里深入讨论过差异、需要多长时间、需要什么才可以逐步升级。

初级程序员

在大学学习的知识,和社会上实际需要的技能,是有一个差距的。所以初出茅庐的开发人员,一般需要恶补一些实战的技巧、知识,譬如去自行修炼、请教高手,或者参加培训班。

我从业10多年,从业初期是互联网刚起步的阶段,身边一些刚毕业的朋友,会参加那种用目前眼光来看是属于“野鸡”的培训班,这些培训班质量参差,其中不乏各种刻板的、一刀切、让学员造假、”浅入没出”的培训老师。

刚出道的开发人员,不管从哪个途径进入市场,开始的2-3年,都会被称为初级开发人员,职称一般不看代码量。关于代码量,有个段子,就是有开发人员,从网上克隆了著名开源项目的整个源代码,然后签入,他的代码量就是过百万了。

这个阶段的程序员应该像海绵那样吸收新知识,到了2-3年后,能单独维护一个模块。

中级程序员

一般要求4-6年经验,这些同学应该可以独当一面,负责设计、开发某个模块。

高级程序员

需要7-9年经验,他们可以设计和开发某个程序,系统里面的大模块、基础架构等。

小头目

9-11年,负责团队的建设、交付和代码质量管理等等,

首席研发人员

12+年,是某个团队最核心的开发人员,遇到技术问题,最后都会找这个人来解决。

具体的分类和路线,可以参考我写的:《爆栈思想 – 究竟怎样才能技术专家》。

态度的转变

我高考报志愿的时候,一些同学报计算机专业,纯粹是因为这个专业开始热,赚钱。所以,一些同学对其的态度,在开始时候,把它作为纯粹的混口饭吃的工具,是可以理解的。

但是,你思考一下:白天绝大部分的时间,你不是在上班,就是在上下班的路上,如果你不喜欢这份工作,you are f***ed!更糟糕的是,国内一些公司还搞996,你周末的时间都被占用了,那多么悲惨啊!

做一行,爱一行。到了老的时候,你回头一看,这辈子,奉献给了不喜欢的事业,那是多悲伤的事情。

软件开发是创造性的工作,需要专注和创意,如果不喜欢,那真的很难会有成就。所以,当你把这份工作当成事业来经营,那会是一个很大的改变:你会热衷于起早摸黑,孜孜不倦地钻研,为了一个解决不了问题/实现不了的功能而不能入眠。

一些不甘于做老油条,推崇“如果人没有梦想,那和咸鱼有什么区别”的同学,可能在某个阶段,为自己干活,创业去了。但是,这就像投资,风险更高。

当然,一些觉悟比较高、能力比较出众的同学,在职业的初期,便下海去了。所以,职业的路线,还是因人而异,没有所谓的“最短路径”,这可不是让你写Dijkstra算法。

更多的职业/职场心得,可以参考我写的:

 

对于有志于参与软件开发事业的同学能从我写的文章中获益,我深感欣慰。我特意写这篇文章,希望能给你们一点火花,激化出更多的学习动力。

其实软件开发这个生涯,是修炼,也是享受,苦与乐同在,失败与成功并存,坚持不懈,继续前行。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈心得 – .NET源代码的高效使用方法

盘古初开

.NET刚推出的时候,微软自带ildasm等工具,但是功能非常单一,譬如只能看一个文件的中间语言(IL)。

.NET从第一版本开始变将其标准化,开源了核心框架。

商业化

后来市面上出现了一些反编译工具,譬如ILSpy、Reflector(后来商业化)、DotPeek、Just Decompile等工具,都能很好地查看各种未被混淆的程序集的源代码,譬如能在类里面进行关联跳转等。

彻底开源

几年前,微软把.NET生态链开源(框架、基础类库、编译等),托管在GitHub。你可以使用GitHub搜索、查看源代码,但是没有Visual Studio里面那样方便。

更用户友好的查看方法

微软把基础类库的源代码放在自家的Reference Source网站了,你可以使用它来快速查看、跳转。

 

 

爆栈思想 – 怎么样才算是某个领域的专家

我们发现,很多简历充斥着各种“精通”,尽管刚毕业不久,没有多少实际项目经验。

 

究竟怎么样才算是某个领域的专家呢?

 

应该分几方面看:
  • 技术深度
  • 影响力
  • 对社区的反哺/贡献
譬如数据库存储这块,拿SQL Server做例子,应该掌握以下技术的原理、解决办法和最佳实践:
  • 数据类型/对象
    • 各种数据类型的转换优先级、差异
      • 看似简单,举2个例子:
        • SELECT 1 + ‘+’ + 1
        • 4种不同的临时表/表类型差异和最佳实践
  • 访问
    • 各种DDL/DML/DCL/TCL的最佳实践
  • 内核机制
    • 调度器
    • 各种hint
      • 升级、优先级和差异
      • 堵塞
      • 死锁
    • 等待/延迟
    • IO Stall
    • 进程/请求/任务/连接
    • 缓存/缓冲
  • 最大限制与版本差异
    • 各种级别/方面的最大/最小限制
    • 不同版本的差异
    • 不同版本的新特性、失效特性
  • 深入排错
    • 错误的级别和哪些会在客户端触发
    • 排错的多种方式
  • 调优
    • 表、列设计的最佳实践
    • 索引、扫描、各种Lookup、Bookmark
      • 各种类型的索引的差异
      • 性能相差数万倍的设计
      • 索引管理最佳实践
    • 执行计划
      • 如何找到性能瓶颈
      • 编译、损坏与修复
      • 如何强制刷新(多种方法和副作用)
    • 不同方法的性能巨大差异
      • 譬如COALESCE vs FOR XML vs STRING_AGG
    • 利用多核的最佳实践
    • 数据库/日志文件切分、存储的最佳实践
    • 数据库/日志备份/恢复的最佳实践
    • 内存调度最佳实践
    • 内联
    • 各种trace flags
  • 海量数据处理
    • 高效分库分表
      • 各种切分的优缺点
    • 如何实现大量数据的导入和导出
  • 安全和访问控制
    • 如何实现实例、数据库、表、行、列多级访问控制
    • 如何防止注入和入侵
    • 跨库访问的最佳实践
  • 审计和记录
    • 审计的最佳实践
    • 如何高效实现修改操作记录
  • 容灾、高可用最佳实践
    • AlwaysOn / HAG
    • 如何fail over
    • 备份的多种方式、差异和最佳实践
  • 扩展
    • SQL CLR
  • 管理/自动化
    • 任务
    • DMV
    • DBCC
  • BI
    • SSIS
    • SSAS
    • SSRS
如果详细写下来,这会是一本《SQL Server专家》。

 

关于影响力、对社区的反哺和贡献,这主要是看是否参与社区的讨论/问题解决、代码贡献等。

 

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。