0

编程进阶之路,虽无捷径但有长短

 2 years ago
source link: https://blog.51cto.com/u_14439672/4936704
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言:最近收到很多读者朋友私信,问我如何学习编程,这个问题其实很难正面回答,而且本人也确信自己达不到指点别人学习的高度,这篇文章基于作者自己这几年趟过的路,和大家聊聊编程学习的话题,仅供一些感到迷茫的朋友做点参考。

一、面对选择

1、编程语言

学习编程的第一件事就是面对语言的选择,编程语言五花八门种类繁多,不同的技术类型适应不同的应用场景,所以语言本身没有高低之分存在即合理,学会做选择才是入门的关键;

【建议】 在选择之前对主流的技术选型做对比了解,熟悉不同编程语言的学习成本、难度、适用场景、市场需求等基本情况,具体如何选择可以从如下几个方面思考:

  • 兴趣使然:自己感兴趣的东西才能更加容易的持之以恒,技术积累最需要的就是坚持不断的沉淀,没有其他所谓的捷径可走;
  • 主流语言:在单纯做语言选择的时候,更推荐从主流中选取,市场的工作机会多,这样求职压力就会减少,从各大招聘网站上搜索即可得到参考性数据;

【建议】 在时间允许的情况下,除了深入学习一门主流语言,还可以对其他技术做入门级的学习即可,如果时间不允许,那就一定要专注在一门语言上,以提高专业水平和市场竞争力。

2、入职公司

工作上对于入职的公司选择,网上各种分析帖已经说的十分透彻了,通常来说,如果真的具备选择不同公司的能力,都不会纠结于如何选择,首先看如下几种类型的公司:

  • 创业型:有资源、资金、好的想法的创业团队,加入的门槛是最高的,如果能在公司初创期加入,可能3-5年就会成功的走出职场;
  • 大公司:复杂的业务模式,庞大的系统架构,严谨的协作流程,这是大厂的基本标签,所以在大厂不够锻炼人的说法有点迷,职场绝不单看技术能力;
  • 小公司:小公司与创业型公司有本质上的区别,这里更多的指业务模式单一体量较小的公司,很容易出现一个人担任多个角色的情况,确实锻炼人;

以上说法只是大概率的普遍现象,不针对个别不同的情况,通常主流的建议都是推荐选择对自身发展有影响的公司,以便于更快的积累专业能力,这样后续有更宽阔的选择空间,在职场初期也大多会这样选择。

【事实】 上在职场沉淀几年之后,多数人再次面对选择的时候,首先考虑的就是薪水高低,人一但尝过生活的五味杂陈,就能体会到经济能力才是对选择的最大支撑,用一句经典的话来解释:人到中年身不由己,上有老下有小。基于普遍的真实状况来看,薪水的高低与公司入职门槛的高低成正比。

3、发展路线

职场上发展路线是至关重要的,工作的前2年,需要不断积累专业的技术能力,随着经验的积累薪水的提高,尤其是心态上的不断变化,坚定不移的走技术路线的人很少,这与当下互联网的环境有最直接的关系,这里说几个常见的发展路线:

  • 技术路线:需要对技术追求抱有持续的兴趣,技术既要具备深度也要具备广度,大多数开发在职场初期可能都具备这种心理,但是随着职场的不断磨练和环境的影响,追求技术的热情,也许会被磨的平淡;
  • 管理路线:技术向管理角色的转变,因为互联网的环境原因或多或少存在一定的被动因素;多数公司站在需求与成本平衡的角度,对于极具技术深度的人才需求并不强烈,技术能力较好同时具备业务和团队的管理能力更受职场的欢迎;
  • 创业路线:在互联网领域中机会还是比较多的,各行各业都在提倡互联网+的背景下,如果在职场中有了足够的能力、资源的积累,会有相当一部分选择尝试创业;

【注意】 如果把技术当成解决业务的工具,即使对技术深度的追求不多,也要对技术的使用做到细致与熟练,对于专业范畴内的能力是不能打折的,遇见过少数的技术面试这样解释自己的综合能力:因为追求于项目管理或者业务解决能力,所以欠缺技术细节方面的沉淀。这种思路当真是清奇。

二、技术栈整理

上面聊编程中关于选择的热点话题,这里来说具体的技术积累,作为一名Java编程选手,下面主要围绕相关主流的技术栈与进阶过程做梳理,大致分为基础、进阶、高级三个阶段,受到工作经历与经验的影响,所以在划分的时候存在诸多主观因素。

1、基础篇

在衡量一个开发人员的能力时,通常会提到一句话:技术深度与业务高度,这里说的技术深度,至少有6-7成的因素是指基础能力的深度。经常阅读框架的实现源码会发现,都是对于JDK源码、设计模式、结构算法的排列组合,从而形成解决某类场景业务的组件。

编程进阶之路,虽无捷径但有长短_业务高度

【建议】 在有大量模块化空闲时间的阶段,把主要精力持续放在以上基础模块,是收益最大的选择,这里更多指大学阶段。编程中越是基础原理就越复杂,这是普遍认可的共识,所以这个模块在学习的时候对于时间成本要求较高,一旦进入工作阶段,很难在抽出整体的时间细致的回顾基础模块。

假设Java的集合容器模块,用1-2周的时间,从API使用到源码逻辑,分析内在的扩容机制,涉及的算法与数据结构,进而再上升到设计模式的实践,流程这样走下来对于基础的理解就具备一定的深度了,也自然达到触类旁通的效果,那么对于IO流与并发也就是相同的原理。

2、进阶篇

这里罗列的是当前技术选型中常用的框架与组件,当进入工作阶段之后,会接触到各种不同的开发组件,学会熟练使用不同的组件去解决不同类型的需求是不可缺少的能力,这时候对于框架原理的理解,完全依赖于基础能力的积累程度。

编程进阶之路,虽无捷径但有长短_技术深度_02

【说明】 一下,最近几年随着对互联网数据的重视,很多公司都在做数据的采集沉淀与分析,同时大数据领域的开源组件推出,已经弱化了Java工程师与大数据工程师的边界,所以对于大数据技术栈的了解,对于管理海量的业务数据是至关重要的,熟悉3-2个数据存储查询的组件,会提供更开阔的技术选型思路。

3、高级篇

当能力到达这个阶段,基本上就是架构师级别的水准了,同样的道理这个阶段依赖于基础和进阶能力的沉淀,鉴于作者本人没有历经过架构师的职位,所以无法给到主观的建议,只是对于团队中架构师的职责做的分析,主要在于提供技术栈的选型和复杂业务的解决方案,流程自动化是分布式系统的必要支撑。

编程进阶之路,虽无捷径但有长短_技术栈_03

【注意】 这里只是单纯的技术进阶的角度,关于衡量开发人员的另外一个核心因素:业务高度。站在客观的角度去看的话技术与业务能力需要一比一提升,业务管理也是走出开发角色的基本要求。

三、业务管理

从入职场开始,因为没有待过纯技术型的公司,所以都是在围绕业务场景做编程开发,能感觉技术能力有较大提升的阶段,都是在解决复杂业务之后的反思。业务的底层逻辑是流程管理与模型建立,如何认知复杂的业务并进行抽象设计是技术水平的直接体现。

【然而】 在公司的日常面试工作中,时常会遇到少量求职者表达自己单方面的诉求:一种是希望公司可以提供技术发展路线,而不是常年累月的业务版本;另一种则希望公司能提供业务发展路线,入职之后可以慢慢脱离技术方向。如果站在招聘需求的角度去考虑,建议在求职面试时不要表达这种个人发展路线的追求,因为多数公司的招聘目的都是:需要技术人员来实现业务需求。

【误区】 职场上的新人选手,很容易产生这样一种心里:每天都是理不清的业务需求,改不完的坑坑洼洼,然而换个公司和环境之后,会发现依旧是这种工作节奏。所以在新手阶段就用乐观的心态去面对各种业务模式,并且持续的学习和总结各种业务解决方案,这是开发同学技术转型的核心竞争力。

编程进阶之路,虽无捷径但有长短_程序人生_04

【通常】 来说,业务是关联公司各个角色的连接点,对于业务解决方案都会以各种文档的形式记录并沉淀下来,这也是团队常用的一种管理手段,也方便以后在类似的业务中提供借鉴参考,不断提升业务落地的能力和效率。实际上大部分开发选手都会选择技术与业务同时积累的方式,尽量放大自己职场的可能性。

四、拓展能力

拓展能力作为职场上必备的软技能,并不是程序员才需要具备的,对于常说的管理能力、流程规范等都是经验积累的体现,至于这些能力如何去积累很难一概而论,因为不同的环境经历的不一样,好的多借鉴,差的作为反面教材即可,这种能力通常在一段经历之后花点时间总结反思就会明白。

编程进阶之路,虽无捷径但有长短_业务高度_05

【特别】 说一下关于认知这种抽象的话题,因为存在于产品开发的各个环节,在职场上也会经常听到,认知导致思路对不齐,所以不管是产品、开发、项目经理;如果认知角度单一,看法就会片面,如此在流程协作中很容易产生极大的分歧。

五、学习与积累

专业的工作能力和经验积累包括多个方方面面,技术、业务、软能力。这种沉淀是一个持久的过程,以乐观的心态去学习遇到的冷门技术栈,用平静的心情去研究热门的新框架,并且不断的总结业务实现的方案。最后祝大家:风平浪静、扬帆远航。


同系列推荐


编程进阶之路,虽无捷径但有长短_技术栈_06


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK