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

一、面对选择

1、编程语言

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

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

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

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

2、入职公司

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

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

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

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

3、发展路线

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

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

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

二、技术栈整理

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

1、基础篇

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

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

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

2、进阶篇

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

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

3、高级篇

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

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

三、业务管理

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

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

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

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

四、拓展能力

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

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

五、学习与积累

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

END


编程进阶之路,虽无捷径但有长短相关推荐

  1. 【Java编程进阶】Java语言基础入门篇

    从今天开始,就要写Java编程进阶从入门到精通系列的文章啦!希望大家学习完都可以找到心仪的工作,在自己热爱的岗位上闪闪发光! 推荐学习专栏:Java 编程进阶之路[从入门到精通] 文章目录 一. 第一 ...

  2. 【Java编程进阶】常量变量及作用域

    推荐学习专栏:Java 编程进阶之路[从入门到精通] 文章目录 1. 常量 2. 变量 2.1 变量声明和初始化 2.2 变量的分类和作用域 1. 常量 常量的概念不难理解,它的值就是字面显示的值,其 ...

  3. 【Java编程进阶】封装继承多态详解

    推荐学习专栏:Java 编程进阶之路[从入门到精通] 文章目录 1. 封装 2. 继承 2.1 继承的语法 2.2 子类重写父类的方法 2.3 子类隐藏父类的方法 2.4 super 关键字 2.5 ...

  4. Scala进阶之路-面向对象编程之类的成员详解

    Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...

  5. Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)

    Algorithm:[Algorithm算法进阶之路]之算法中的数学编程相关习题(时间速度.进制转换.排列组合.条件概率.斐波那契数列) 目录 时间速度 排列组合 进制转换 条件概率 斐波那契数列 时 ...

  6. Esp8266 进阶之路36【外设篇】乐鑫esp8266芯片SDK编程驱动时间芯片 ds1302,同步网络时间到本地,再也不怕掉电断网也可以同步时间了!(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  7. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  8. 网络编程+go+java_GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

  9. 【编程之路】Python编程进阶

    Python编程进阶 不使用中间变量,交换两个变量a和b的值. a, b = b, a 需要注意,a, b = b, a 这种做法其实并不是元组解包,虽然很多人都这样认为.Python 字节码指令中有 ...

最新文章

  1. OpenCV 静态链接 libstdc++
  2. 网友:这才是高质量人类女性!32岁清华女博士获奖百万
  3. VS2008 Qt Designer 中自定义信号槽
  4. 【报告分享】2022中国品牌出海模式洞察及趋势情况报告.pdf(附下载链接)
  5. python贪心算法几个经典例子_闲来无事整一下贪心算法 用python实现的
  6. java系统课程设计报告_201621123063《JAVA课程设计报告》
  7. 破解新浪微博js加密登陆超详细
  8. 51单片机外设篇:LED点阵
  9. If(flag) 与 if(!flag)
  10. Debian 7 源(32/64bit)好用的源
  11. party_bid_core三种数据结构分析
  12. 拼多多优惠券赔付规则 拼多多发货超时具体怎么赔 拼多多超时发货之后没有优惠券怎么办
  13. 双十一过后,你的钱包还好嘛?快速回血攻略来了
  14. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月17日~10月23日)...
  15. 公众号文章阅读量数据导出
  16. 服务器重装系统c盘过大,C盘满了,不想重装系统怎么办?
  17. 现代密码学导论-10-EAV安全
  18. Excel与PowerBI 之PowerQuery 编辑界面异同-PowerQuery 系列文章之三
  19. 2022国自然中标至少1篇1区代表作?没中接下来怎么办?
  20. 当程序员5年,他从来不加班,工资居然还每年都在涨...

热门文章

  1. git删除远程的分支
  2. 黑马程序员——Java基础---数组与集合之间转换
  3. java nashorn使用场景_优化Java调用Nashorn引擎的性能
  4. 大模型入门(四)—— 基于peft 微调 LLaMa模型
  5. 噬灵僵尸异界游最新章节
  6. Selenium 底层实现原理详解
  7. iOS蓝牙打印价签:【商品条码、品名、零售价、规格信息等】(商品名称支持换行显示)
  8. CSS :not()选择器 (反选伪类)
  9. 分布式Session如何存储
  10. 【算法笔记】反转二叉树