大家好,我是宁楠,很高兴今天可以在这里为大家做分享,我的分享不是讲具体的编程技术,就是把我多年以来的学习工作经验分享给各位,希望对大家有所帮助。
从我接触 Java 到现在有将近十年的时间了,我是从一名小白一路成长为技术团队负责人,走的是一条标准的技术路线,作为技术人,大家肯定都希望不断提高自己的能力,置换更优质的资源,那么如何做到这一点呢?
回顾我这些年的学习工作经历,我认为最重要的是找到正确的学习方法,什么是正确的学习方法?这个问题要因人而异,每个人都有适合自己的学习方法,今天给各位分享一下我的学习方法,大家可以做为参考。
我一共总结了 5 点。
1、一切以实践为主
我在学习新技术的时候不会把太多时间花费在理论知识上,首先会大致了解一下技术背景,知道它是做什么的,然后重点研究如何使用它,快速实现一个 Demo。
这一轮流程走下来,虽说对概念性的内容还是比较模糊,但是我已经构建起了对技术的直观认知,在此基础上再慢慢细化,就像盖房子一样,我会先把框架搭起来,再做局部细化。我们在学习的过程中一定要注意理论和实践相结合,用实践去验证理论,这样你才能真正理解概念。
拿编程举例,很多人在学习一门新技术的时候,会认认真真地读文档,我认为这不是最好的方式,我们可以先大概了解一下这门技术的基本概念,最重要的是搞清楚它能干啥,然后快速用它搭建起一个项目,随后运行,看到结果,把这个流程走通。
如果中间有什么环节不清楚,暂且跳过,先看到结果,这样我们就会对它有一个非常直观的认知,在这个基础之上,再去优化细节,完成从全局到局部的覆盖,这样更有利于把这门技术应用到实际开发中。
还有就是要学会总结,定期复盘,对自己一段时间内的学习任务做一个梳理。遇到哪些问题,解决了哪些问题,久而久之,你就形成了自己的知识体系。也许刚开始这个体系很脆弱,很简单,但随着你坚持去总结复盘,这个体系会越来越完善,越来越强大。这就是你的核心竞争力,你的内功心法,无论外界环境怎么变,任何东西到你这,都能融入你的体系,变成你自己的东西。
2、学习要以输出结果为目的
当我学完一门新技术的时候,我一定要搞出一个成果,可以是一个项目案例,也可以是一篇技术教程。因为只有时刻带着输出结果的思想去学习,才会真正有效,比如写技术教程,那么首先我必须要把所有技术点都搞清楚,吸收转化成自己的东西,然后才能输出。学习的最高境界就是输出,如果你能用自己的语言把东西给别人讲明白,那就说明你是真的掌握了。
3、把技术带入到工作场景中
这一点非常重要,当我学会一个新技术的时候,我会思考如果要用它来实现当前的需求,应该怎么做?同时会结合深度思考来做笔记,写笔记的过程也是一个输出的过程,是对思路的梳理。我们学习新技术的目的就是为了应用于工作中,时刻将技术带入到具体工作场景中,会让我们的目的性更加明确,明确了目标,学习效率才会更高。
4、提高思维认知
不同的思维认知决定了我们做事的方式,不同的人,对待同一件事的处理方式都是不同的,由你的思维认知决定,很多件事情累加起来就是你能到达的高度。
举个例子,两个刚入行的初级程序员,一个是按部就班的按照工程师的思路去完成工作,另外一个是按照架构师的思路去完成工作,虽然能力暂时达不到,但是并不妨碍站在架构师的角度去思考问题,可想而知几年之后第一个程序员最多是个高级工程师,第二个很有可能就是架构师或者 CTO。这就是思维认知带来的巨大差别。
那么如何提高思维认知呢?
唯一的途径就是多学习,多向比你层次高的人学习,他们的经验不一定全对,但一定是有用的。还有就是多读好书,有选择的阅读,多去专业权威的网站上看大佬的文章,向大佬学习。同时要多实践,把自己学到的东西通过实践去验证、优化、升级,真正转化成自己的东西。这个过程可能会很艰辛,很漫长,但是一旦自己提升一个等级之后,你的视野,思路都会是一个全新的状态。
5、把事情做到极致
之前有位读者跟我聊天,说他每天在公司的工作很单调,就是打打杂,没有一点价值,自己很苦恼。其实,看似非常简单的工作,只要你把它做好,做到极致,一样会产生很大的价值。
我想到了以前公司的一个同事,我刚到公司的时候她是个做行政的小姑娘,每天的工作就是打杂,比如管理员工的电脑,电话,帮出差的员工订机票,收集员工的报销单等等,每件事情都是看似很简单的小事,但是她把每件事都做到了极致。
换电脑的时候会把 PPT、Word 等常用的办公软件一并装好,订机票的时候如果你是从公司走会帮你叫车,填写报销单的时候会不厌其烦告诉你怎么填,帮你粘发票,复印单子,总之所有的事情都帮你想到了,你就会很轻松,她现在已经成长为公司副总,这就是把一件简单的小事做到极致所带来的变化。
同样的,我们在做事情的时候能不能也尽量把它做好做完美,写代码的时候能不能注意一下命名规范,代码缩进,能不能给该加注释的地方加上注释,写文档的时候能不能注意一下空格,标点符号,甚至你在发朋友圈的时候能不能注意一下错别字,优秀其实很简单,把每个细节做到极致,就是优秀。
以上 5 点内容是我关于学习方法的分享,通过高效的方法快速提升自己之后,我们还要学会如何在实际工作中进行应用,接下来是分享的第二部分,如何在职场中更高效的工作。
大家可以先思考一个问题,对于初入职场的新人来说,什么是最重要的?不是理论知识是否扎实,也不是你懂多少新技术。最重要的是解决问题的能力。
为什么这么说呢?从公司的角度看,招聘员工其实就是一项投资,公司花钱雇你来上班,当然是需要考虑投资回报率的,那么你最基本的职责就是要在规定的时间内完成规定的任务,这样公司才不至于亏本,你才能够继续待下去。
软件开发的不可预期性很高,你不知道什么时候会遇到哪些技术难点,也不知道解决这些难点需要花费多少时间和精力,这就要求你具备快速解决问题的能力,在短时间内把问题搞定,能保证项目的按时交付,你才是一名合格的程序员。
我在工作中常常会遇到痴迷于技术的程序员,这本身没有问题,每个程序员都应该痴迷于技术。但是需要明确的是技术是为项目服务的,也就是说能按时交付合格的项目是最重要的,技术是否高大上不那么重要,如果不能按时完成项目,连最基本的要求都做不到,何谈技术优化升级?
所以在实际工作中不要过于追求技术,一切要以实践为主。我曾经遇到过这样的同事,技术很厉害,但是喜欢在项目中炫技,把自认为好的技术强行加入到项目中,不考虑是否合适,是否会影响项目进度,想方设法也要加进去,最终的结果往往是辛苦加班很多天也没有完成任务,而别人使用相对传统的技术很快就完成了,这就是本末倒置,结果是得不偿失。
技术固然很重要,但是应该以项目为重,为项目选择最合适的技术,而不是你认为最新最好的技术,公司对项目的要求首先是能按时交付,在这个基础之上,再去考虑技术的迭代和优化。
听到这里有的人可能会说,那编程工作就很简单了,只需要掌握一些基本的技术,能完成工作就可以了,不需要学习什么新技术呀,这种理解就过于片面了。我上面说的是对一个开发者最基本的要求,或者说是最低标准,如果你希望自己的职业生涯能够呈现增长的趋势,就需要不断学习新技术,不断更新优化自己的知识体系,并且记住一点,只学有用的,什么是有用的?
一方面是你当前工作所需要具备的技能,可以更好地帮你完成工作。另外一方面是前瞻性的技术,比如未来两三年你可能需要掌握的,或者是大趋势所指向的技术。并且时刻牢记实践为王,实际开发中遇到问题,就有针对性的去学习,去把它解决掉。刚开始你的点会很零散,但是日积月累形成体系之后,看似零散的知识点都有内在关联,就会非常强大。
当你从初级开发成长为中高级开发之后,就不能仅限于完成基本的业务功能了,这样的工作没有多少含金量,干一年和干三年不会有太大的区别。打个比方,当搬砖对你来说已经是轻车熟路,非常熟练了,你就需要去思考怎么设计房子了,也就是从 CRUD 操作进阶到软件设计架构的能力。
怎样提高自己的软件架构能力呢?
第一你要具备扎实的基础知识,这是根本。
第二要有足够的项目经验,需要在项目开发中多思考,多积累,熟悉整套业务开发流程。
第三要视野开阔,技术领域的涉猎面要广,接触的东西越多,你的选择面就越大。
提高自己编程能力最直接有效的方法就是看源码,学习源码是有一定门槛的,刚开始看的时候可能会遇到很多问题,或者根本就看不懂。这个时候也不能放弃,要逼着自己看源码,第一遍第二遍完全不懂没关系,坚持看到第三第四遍的时候会发现自己好像懂了那么一点,继续坚持下去就会理解源码的思路了。
可以尝试自己写框架,不要求性能有多高,重点在于提升自己的编程思维,你自己写了,无论好坏,对于框架本身的使用一定会上一个台阶。
同时学习的阶段性很重要,时刻找准自己当前所处的位置,学自己当下最应该学习的东西,慢慢提升自己的等级,不要跟风,别人学什么你就学什么,要有选择的学习,根据自己的实际情况,有针对性的安排学习计划,来提高自己。
假如你是刚入行的初级开发,你首先应该考虑如何提高自己解决问题的能力,学习业务知识,更加高效的完成工作,而不是去学习软件架构设计,连地基都没有,怎么可能有高楼呢?
学习编程是一个从无到有,从有到精,从精到广的过程,想要做好软件开发的工作,需要不断的总结,思考,学习,不断去完善自己的知识体系。好,我今天的分享到这里就告一段落了,感谢各位的参与,预祝各位在职场上一帆风顺,早日升职加薪,完成逆袭。