编程学习过程中有哪些快速提高编程技巧的方法？
互联网行业是一个充满挑战且内卷比较严重的行业，作为程序员如何让自己一直保持不错的水准或者避免让自己掉队，那就需要通过不断的学习提升自己。本文就和大家交流下我们如何提高编程能力及技巧水平。 互联网这个行业不同于其他行业，知识体系实在是过于庞大，知识更新非常快。作为一个普通人无法全部学完，所以我们在提升技术的时候，首先需要明确一个目标，然后制定好完整的计划，同时找到好的学习方法，这样才能更快的提升自己。 举例：我是做Android开发的，我不会今天去看看C++，明天去学学Python。我首先会选择提升Android开发能力，优先学习Android开发相关内容，本领域学习掌握到一定深度，再去拓宽其他知识面。学习自己领域内知识我会优先汇总整理本专业范围内的知识体系图谱，类似这种： 这样可以清楚明确自己需要学习知识的范围，明确范围后，然后制定一个完整可行的计划，按计划逐步学习，每天学习消化一点，按这种思路学习完你的知识才成体系。 内容明确了，计划制定好了，接下来就是如何去学习了，学习的方法有很多种，现在获取知识的途径太多了，但是我们的时间是有限的，如果能规划利用好自己的时间，选对适合自己的学习方法，是提高学习效率的前提条件。这里我简单列举几种方式，对比一下几种方式的优缺点，详细内容我就不一一阐述了。 优点：书最大的特点我觉得是知识全面 、严谨 缺点：有些枯燥，一本书可能很多内容都对自己帮助不大，可能对我有用的就一两个章节 优点：视频容易入门，可以看到操作及演示 缺点：不成体系，一般都是讲重点，忽略细节，很多系列的视频后面的都是收费的 优点：获取新技术、可以看到同行们都学哪些，不至于掉队 缺点：内容庞杂，水平参差不齐，没有鉴别能力容易被误导 优点：完整、成体系 缺点：时间要求高、学习成本高 优点：我认为这样学习的方法是最快的 缺点：碰到这样的人需要运气，要珍惜 为什么上面要啰啰嗦嗦的说一大堆学习方法，因为我认为所谓的技巧提高也是有前置条件的，就是你得有一个好的基础，不然谈不上提高，想要提高，基础必须得很牢固，所以你得先打好基础。 举个例子：我2012年刚开始学Java编程时候，那会开发都是用Eclipse手写Bean实体类，后来随着开发工具改为IDEA,再后来转移动开发用Android Studio知道有插件可以直接生成Bean实体类，不用手动写了，直接把后台的JSON字符串拿过来拷贝到工具中一键生成，生成好就可以直接用了。但是如果你没有手写过，直接就用工具生成，那么生成出来的代码有多少方法、每个方法的作用，可能你都不清楚，所以这就是基础的重要性。 那么我们打好基础后，如何能快速提高我们的水平呢？ 编程行业可能对于你的理论基础要求不那么高，但是对于你的实践动手能力要求是非常非常高的。直白点说：你说的再多都没用，你得能做出东西来。我佩服的不是满嘴长篇大论的人，我佩服的是能解决各种问题的大神。那种大神没有解决不了的bug,没有实现不了的功能，做出来的各种功能、各种项目不能说没有bug，但是出现的bug非常少，系统功能非常稳定。 那如何才能达到大神的水平呢？其实大神也是普通人，他之所以能成为大神也是一个坑一个坑踩出来的，他碰到并解决的bug比一般人都要多，所以他在做任何功能的时候都会考虑到各种工况、各种数据出口入口、各种风险。经验都是来源于实践，实践出真理！对于编程这个行业，实践尤其重要！离开了实践，学习就是无源之水无本之木。 举个例子：我当时刚入行学java编程，我的培训老师讲到空指针知识点的时候就说：如果将来你们从事编程行业，这个问题会一直陪伴你们！其实当时我听到这句话，内心想的是：这么简单的东西，还会出问题？ 后来我想不用我多说，只要真正写过代码的人，99%的人都应该碰到过这个问题。所以别人教你各种方法，和你说再多都不如你真正写一次让你记忆深刻。 编程技巧的提高我理解没有什么捷径可走，一定是做的项目多了，踩的坑多了积累出的经验。 除了实践，还有一点就是在做任何功能、解决任何问题的时候都要多一些思考。如果脱离思考，即便你做的项目再多，也只是机械的重复，这次我碰到一个空指针bug，解决后是不是要思考下下次如何避免？下次再写类似的代码时，是不是要多加一些判断？是不是要考虑和后台商量数据传输规则，过滤掉空项？即便后台处理了，是不是要考虑后台传值有异常时，我们前端如何处理展示？有人说后台犯错，还需要我买单？小伙子，格局要提高下。大家是一个团队，是一个整体，先不管谁的问题，项目出了问题，大家都有责任，要把自己负责的功能做好、提前规避掉各种风险才是一个成熟的程序员。 提升自己还有一个很好的途径是和行业内的人多沟通，可以是你的同学、你的同事、你的领导都可以。因为在聊天的时候可能会不经意就知道了一些新的知识点，学到了新的技能，我以前是做Android开发的，不瞒大家说，我当时都做到部门经理了，还没用过ADB无线调试，以前习惯了插根线去真机上调试，有次和部门新来的一个开发聊天时，从他那里学到的无线调试方法。方便了很多，有的时候线坏了也不担心了，类似的这种场景还有很多。所以平时多和周围的人沟通一下、聊聊技术是一个很不错的方式。 互联网行业技术的发展日新月异，新技术层出不穷，具有良好的学习能力，能及时获取新知识、随时补充和丰富自己，已成为程序员职业发展的核心竞争力。一个能够不断进步的人才有更辽阔的未来和更可观的前景，尤其是对于IT行业这种每时每刻都充斥着改变的领域，学习能力更是必不可少的存在。所以我们必须不停的去学习才能保证我们不掉队，本身就是一个活到老学到老的行业，可以针对性的去看行业内一些大神的博客和公众号，我有很多东西都是从一个大神的博客学到的，其他的学习方式在第一部分我也都提到了，大家根据自己实际情况做选择即可。 每天的工作和学习其实是很枯燥的，需要坚持，最好的办法就是自己回忆每天学到的内容，然后把他写下来。写博客是一个很好的方式，可以帮你加深记忆，同时提高对这个知识点的理解。很多人不敢开始，怕自己写的内容太简单被别人笑话，其实大可不必，只要是自己思考过的内容都可以记录下来，我们需要做的是给自己做积累，不用在意其他人眼光。 我在刚开始创作的时候就是记录基础的知识点，后来慢慢写一些解决具体问题的文章，再到后面就写归纳总结类的文章。现在转管理慢慢会写一些行业类和管理类的文章，总之就是一直在写。这个过程坚持下来会帮助你加深对知识的理解，另外后面碰到同类问题还是看下之前是如何解决的，我经常碰到同样的问题，但是还是忘记自己当时是如何解决的，后来就去自己的博客看一下当时如何解决的，还是那句老话：好记性不如烂笔头，不断复盘总结是非常重要的。 开发做了这么多年，积累了一些经验，这里和大家分享下： 1.做项目，先问清楚需求，然后自己用思维导图工具，把各种可能性都罗列出来，都想清楚后再去建项目，写代码。有一句非常经典的话：Think more, Code less！ 2.碰到没接触过的功能直接去github上面搜、搜的时候找star比较多的下载下来跑一下试试，学会用关键字检索，关键字一定要精简，这样你搜出来的内容匹配度才高，比如你搜一个开源视频功能组件，可以这样写：视频播放器，然后选择Most stars ，一般前几个都是主流的。 3.写代码一定要保持良好编码习惯，最好按照一套固定的编码规范来写，编码规范很多大厂都有发过。比如 函数、变量需要定义的有意义，让别人要能一眼就看懂，这部分建议多看源码提高，定义的变量可能还需要避开一些三方库函数或者变量名。 4.写代码的时候对于一些关键的函数和逻辑要写注释，加上必要说明，解释基本逻辑。但是千万别到处都是注释，如果是那样，一定是你的代码写的比较差，不易理解。 5.写代码不是越复杂越好，反而是越简单越好，函数一定要定义的简单，如果太复杂就定义多个函数。比如：for循环一定要减少层级，层级太多一定要想办法优化处理。 6.定义变量一定要注意初始化，定义数组一定要防止下标越界。 7.一些好的函数或者功能一定要单独记录保存，我建议整理一个自己的工具库，把好用的功能或者工具类都保存下来。 8.养成一个随时ctrl+s 保存的习惯，这个不必多说，吃过一次亏就记住了。 9.尽量复用对象、多定义使用局部变量、避免随意使用静态变量 10.养成加TODO的习惯，比如一些自己不太理解的点、一些需要后续优化的点、一些没有处理好的逻辑等等加上TODO后续查找起来非常方便。 11.删除不必要的代码，保持整体的整洁，留着以备不时之需可以通过git版本控制等来解决。 12.重构有利于提高代码维护的效率，对于当时因为时间等原因写出来的一些比较乱的代码需要花时间去重构，一定是对自己有帮助。 13.把自己常用的技术网站、工具网站、资源网站都做好分类收藏为页签，可以方便查找，提高效率。 上面是个人的一些经验分享，如有错误希望大家批评指出，后续想到其他内容也会随时补充，写代码需要考虑正确性、可读性、鲁棒性、可测试性、可以扩展性、可以移植性、性能等等一系列问题，所以需要抱着一个严谨的态度对待，做这行有一个好的心态是非常重要的。 这个章节说些题外话，和大家聊一下我的个人经历，希望大家能从我的一些个人经历当中受到一点点的启发。 我是大专毕业，不是本科毕业。当时在学校期间对自己的未来感到很迷茫，担心毕业后找不到工作，在上大学期间培训了Java开发，毕业后找的工作岗位是Java开发工程师，在第一家公司因公司业务扩展和公司的一位同事学习的Android开发，后来为了涨工资陆续跳过几次槽，在上一家公司做了5年时间。工作从Android开发工程师->Android开发组组长（6人）->移动端开发负责人（11人）->项目经理->部门经理(30人左右)，目前在国内某上市公司担任项目经理岗位。 工作久了慢慢理解技术实现只是整个产品生命周期中的一个环节，而且是一个很容易被替代的环节。为什么这么说，就是我后来转管理岗后经历的一些事，包括和公司的领导沟通，他们传达给我的就是这个理念。技术实现在他们一些人眼里说的难听些就是工具环节，这个人做不了，就换一个人！公司没有人能做，就招一个，招不到人就找外包公司做，总之不能影响我产品发布上线，不能影响给用户交付的日期。所以作为技术人来考虑，我们就需要一直提升自己，让自己不容易被替代，华为云3月内容共创活动我也参与了，当时的任务标题是《如何才能修炼成一名不可替代的程序员？ 》，文中也说明了如何让自己保持竞争力，变得不容易替代，感兴趣的同学可以去看看。对于如何提高自己，让自己保持竞争力，我和大家分享下我个人的一些习惯： 1.我刚入行的时候，java的servlet调用都不会，我碰到不会的问题就问当时带我的那个组长，他当时每天都对我很不耐烦，但是我从来没有为了自己的面子放弃第二天去问他，因为我觉得比起他看不起我，我一直不会写才更让我尴尬。 2.我写代码大概有8年时间，我自己负责的功能测试提出来bug，我都会自己各种查资料想办法去解决，熬夜的次数真的数不清了... 3.我每次下班前，都会把每天的工作在大脑里面做个回顾，然后整理一下一天的工作，在文档里面做个记录，然后提前规划一下第二天要处理哪些工作。 4.我每天会在下班路上经常去逛一些技术类的网站，然后看看有没有什么新的技术类的东西。 5.我从2015年开始写博客以来，保持每月更新，从来没有间断过,这个习惯对我帮助挺大的，因为很多内容写出来真的会加深理解。 6.我博客早期写的一些功能实现类的文章，我都会单独整理一个DEMO，然后上传到平台，我觉得这个习惯可以帮我加深对这个功能的理解。 7.接到新需求的时候，我都会先仔细考虑一下各种工况、各种风险、然后想好技术实现方案，包括后续可能的扩展，是否可以做成组件化在后续同类项目中使用等各种情况，我从来不着急写代码，都是先仔细理清楚思路，这里我推荐大家用下思维导图。 8.后来写代码基本都是复制粘贴，我自己封装了一个common项目，将历史做过的很多项目的同类项都整理到common里面，新接一个项目直接以此为框架，在此框架上新增业务需求类的代码，真正需要手敲的非常少。 9.实话讲，我很少看书看视频学习，但是我会经常看一些大平台的开源项目，感觉一下子就能学到很多东西，里面很多我觉得不错的部分都会照搬到自己的项目中。 10.我平时有收藏的习惯，如好的技术实现类的文章、好用的技术网站、好用的工具类网站、好的开源项目... 11.碰到一些技术难点或者需求不好实现的，一般不会直接和产品battle，调整心态，心态真的很重要，多想方案，少想困难，一般都是实在解决不了才会去砍他... 我们当初是因为热爱才进入这个行业，最后希望大家在编程的道路上保持初心，越来越好！  点击关注，第一时间了解华为云新鲜技术~