初级程序员与高级程序员的差距在哪里?

今天去面试一家集团的公司,最后的结果不用猜想都知道是失败告终。回来的路上,我一直在想失败的原因在哪里。一直没有想明白,没有一个好的师傅,只有自己。从小白到精通,也只能靠自己。方向很重要,一旦失去的方向,脚步就会停下来,能力也会停下来。

我自认为笨,没有很多人对程序这一行业的天赋高。自认为努力点,就会追上别人。正所谓一句话,选择比努力更重要!选择一个方向真的很重要。事实再次论证了这一点,时间对于一身来说真的很短暂,平淡与精彩只是一瞬间的选择。

工作很多年的程序员,开发了很多,但是从来没有问过自己,程序真的只是增删查改吗?实际上,做了很多年的程序员,为什么东西就是只有开发,其他东西呢?这个其他东西就是初级跟高级的差距。

高级程序员必须强化的几个技术能力:

1、深度方向:

  • 设计能力:懂得如何利用分层,面向对象,设计模式等设计组织代码。
  • 编码能力:熟悉程序的语法特性,如何用一两行的代码代替初级开发者的十几上百行代码。
  • 工程能力:学会如何快速构建工程,学会如何构建可读,可扩展的工程,学会如何避免埋坑给后人,学会如何协作维护工程,学会如何保证工程质量,学会如何权衡利弊,学会如何在困难面前妥协。
  • 抽象能力:初级开发者吃会等到逻辑重复时再抽象封装(甚至怕拖进度或者懒惰而放弃),高级开发者通常一开始写出得逻辑就为了以后重用,并且深知一开始多付出得思考设计时间最终都会因为复用的到汇报。很多开发框架就是一步步抽象/埋坑/优化而来的。
  • 架构能力:一个业务系统如何划分模块,模块之间如何协作通信,每个模块的技术选型如何做,系统细节如何规避问题等等。
  • 优化能力:学习如何评估、分析、提升系统性能。优化途径很多,产品功能优化,业务逻辑优化,基础技术优化,操作系统底层硬件优化等。

       2、广度方向
开发基本上离不开操作系统、存储、缓存、网络、webserver等等配套设施,因此这也是高阶必备技能。一旦业务系统出问题了,必须要能快速定位解决(不一定自己解决,但要知道找到哪个负责人来解决)。

比如存储mysql,高级开发者会懂得利用索引、利用分表分库提高查询性能,懂得负载均衡和灾备提高性能提高可靠性(虽然是DBA的工作,但了解了有助于出问题时排查)

比如缓存,高级开发者懂得如何有效且最大限度利用缓存系统提高应用性能。

比如http,初级开发者往往只懂得http网络请求就只一去一回两个包,高级开发者会去深究网络七层模型、会深究http请求的各个环节(DNS、三次握手等等)

比如web前端,学习如何依靠浏览器缓存、CDN缓存、压缩代码、合并文件等等提高前端性能,学习如何进行前端安全攻防。

3、软素质

软素质
懂得团队管理,项目管理,沟通技巧等等。(有空再展开)

4、三多

多看,多想,多写。

4.1、多看技术书籍,开拓自己的视野,学习和接触自己所欠缺的知识,提升自己的技术能力,了解行业技术大趋势。

4.2、多想。

根据前者的铺垫,多想一下架构、设计模式、软件工程、模块化开发等。

项目整体架构的合理性太重要了,决定了今后的业务扩展,好的架构设计避免了大规模的改动带来的巨大工作,具有很好伸缩性的架构更是值得研究。

平常经常听说高并发,大数据,这里用到最重要的就是架构知识。

4.3、多写。

写代码,学习优秀的开源源码,我这人有一个毛病就是经常动笔,做做笔记,记录随想和理解。

优秀的源码往往汇集了很多大牛的心血,值得多去学习和研究,提升自己的码工水平,搬砖来的更容易,避免了太多的重构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值