zoukankan      html  css  js  c++  java
  • 入行四年的思考

      2015年8月毕业入职,到现在已经四年了。

      四年里,国企、央企、初创的私企都干过,从开发的小徒弟做起,事事都要依赖师傅,到自己独立地负责一个模块,再到后来的负责整个产品的后端开发,看到了后端开发从需求到上线的全景。虽然到现在,依然不被自己认为是一个合格的程序员,但是有很多思考的东西,我觉得已经有些上路了。

      困境:

      之所以不认为自己是一个合格的程序员,还是觉得自己的基础不好,所有的招式都是建立在不懂底层,不懂原理,只会简单使用的基础上。也许有一些东西,通过看别人的分析,网络上的文章也掌握了一些结论性质甚至过程也比较清楚的‘原理性’的知识,但都很分散,如果靠这样的方法来前进,那么可能根本就等不到掌握全图的那一天,这个行业快速地自我更新就会将我淘汰。无法自己分析软件框架的利弊,使用时要注意的问题;出了原理性的bug只能去搜索已有的解决方案,靠猜测,靠一遍遍地尝试别人的解决方案,而没有手段自己深入源码,分析不出一击必中的解决方案。这对于一个以之为业的人来说,是很痛苦和无奈的。我时常在想,如果我能够做到遇到问题能够靠着一手硬功夫探测到问题所在,分析出它的发病原理,并且想到哪怕是不那么合理的解决方案,这个时候再来参考别人的东西,我觉得我都能够很快的喜欢上这个行业。是的,现在的我还不够喜欢这个行业,虽然我能够靠着它完成很多别人看起来高大上的任务,但是我并不快乐,我为之深深地焦虑着。

      破局:

      面对这种焦虑,这几年也有过一些尝试,在不断地摸索中,我逐渐下定决心,一定要把几样东西好好研究,学到自己认可的水平。首先,为了弥补自身非专业的缺陷,将计算机相关的基础课自己补充起来才能够为后期的发力打下坚实的基础。我找过很多学校的计算机课程培养方案,但是对比之后发现,很多方案都是兼顾了软件和硬件。但是对比自己的情况,在目前计算机领域分类如此繁杂的今天,我可能不太会去选择转行做一个硬件的开发,所以最终选择了将<软件工程>专业课作为我的自学内容。除了高数,英语(都已经掌握了基础)以及其余的杂课,剩下的《计算机组成原理》、《C语言》、《编译原理》、《汇编语言》、《操作系统》、《并行分布式》、《计算机网络》、《数据库系统原理》、《软件工程》、《数据结构与算法》就是我要面对的重点内容。是的,我也觉得它们很枯燥,很难,但是如果要在之后的几十年里天天受着因为不明白原理而产生的内心煎熬,我觉得那就必须解决它们。当我下定决心,开始在网上找课本,找课程视频的时候,我真觉得大学里没学过这些专业课不能成为以后前进路上的借口,因为资源之丰富,形式之多样,简直是我们上大学时根本就无法企及的。不仅有各个学校名师录播的视频课程,甚至有人在网上陪着一起上自习,在线的PPT资料,可以下载的PDF课本,甚至还有各种攻略为新手指明一条最有效的学习路径...所以,还有什么借口呢?唯一缺的,可能就是你的决心,信心和坚持。

      当然,除了上述的基础课,还得花很多功夫来真正地研究高层语言的相关内容。比如做JAVA后端开发,JDK源码的阅读、编码规范、linux服务器、Spring系列的学习、MySQL的优化、微服务、分布式、各类中间件以及多线程、JVM、设计模式都是需要花费时间来进行研究和沉淀的。但这些都是长期的学习和积累,不断地在实际场景中提高自身的一系列赛道,短时间内没有办法取得很多突破。但是有了之前提到的基础,这些东西都能够进行高效地深入地挖掘,心里也就不那么慌了。

      定个小目标:

      没有目标就没有动力。这里有一些不成熟的思路,但是这一篇文章会在半年内(2019-09-01~2020-02-29)进行不断地改动与补充,所以也不用急于一时将所有目标都确立下来,有些目标只有在前进途中才能被发掘与优化。

      首先,对于基础,所有的课程基本都是以C为基础的,所以为了融会贯通各门课程,一个终极的目标就是自己想办法写一个操作系统的内核。这样就能够将各门课程打通,真正地把基础学到手,一旦基础地部分准备地差不多,就可以花时间来做这个东西。想想就觉得会很酸爽。

      其次,对于大家都看重的源码,要明白看什么、怎么看。我的理解,先要搞明白原理,然后再看它的实现,这是一条大路。在这个基础上,看它怎么抽象的,怎么让代码有这种风格的,相信多问几个为什么,一定能够挖到宝。可以从面试官习惯问的几个类开始看起,然后将他们有联系的都扯出来,一点一点地去啃,这个过程一定是初期艰难而后期就能够举重若轻了。平时写代码时多多模仿,一定是大有裨益的。

      未完待续......

  • 相关阅读:
    用Python构建你自己的推荐系统
    相似度算法之余弦相似度
    python(五)常用模块学习
    Linux系统CPU核数等信息查看
    【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价
    【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布
    【SSH网上商城项目实战26】完成订单支付后的短信发送功能
    【SSH网上商城项目实战25】使用java email给用户发送邮件
    【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
    【SSH网上商城项目实战23】完成在线支付功能
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/11445181.html
Copyright © 2011-2022 走看看