程序员:我希望在将来成为一个比较大的系统的架构师,暂时写的程序是后台程序,我的主语言现在是Java,副语言C/C++、Perl、Python、Go等等,
如何:阅读英文原著,做项目,看教学视频,写博客总结记录
提高:主要是在深度上提高,在广度上也要提高,但是范围限制在能力的范围内,可以进行额外的了解,但是仅限了解,在没有做出决定之前不深挖,精力有限。
能力:使用编程语言的能力(3-5年大厂主程的层次),写出较为优雅程序的能力(了解较多的best practice,高内聚低耦合,高可用。。。),对硬件的理解程度(3-5年大厂主程的层次),英语能力(雅思6.5)
1.阅读英文原著,做项目,看教学视频,写博客总结记录
程序员在工作之余,可以玩技术栈,可以随性而为。
但是,要成为自己技术领域的高手,需要系统性地积累。
最初,树状结构从大轮廓理顺。这可以看书的目录。
其次,是心中有了这种轮廓,对书本以最快速度阅读。自己在心中找出脉络,归纳总结重点,有所取舍。
大轮廓,即第一层分支(章)了解以后,可以理第二层分支(节)。掌握的标准是能够离开书本不杂不漏地口头复述。
对于课本或应试复习,第三层分支一般是指每一个知识点的概念、定义、特点和状态描述、另外形态、适用范围、来由和出处、引申和发展、分支、作用、交叉归属、历史和方向这几个方面。在看书、理关系的时候就要不断地提问自己这些问题,为自己找到答案。如果这些方面在教材上讲的不具体不全面,可以到图书馆或书店查阅相关的材料,和同学探讨,也可以询问老师和经验丰富的人。
经常回忆轮廓甚至整一棵树,发现有含糊、不明确的部分要尽快翻阅教材或相关资料,在模糊处再看一次。掌握的标准是能够清晰地用自己的语言表述。
初学者可参照课本的目录,理顺关系。系统学习法用得熟练以后,应该是自己归纳总结出树状结构。
作为一名程序员,每周重读你一周的代码,二次封装和修改,从代码质量、功能封装等角度积累起函数库,这是非常有意义的事情。之后要遇到类似的问题,相信三下五除二就可以解决掉。
那些技术牛逼的人往往也都是被逼出来的。
有一类人,属于自我驱动型,会主动想方设法自我提高。
但是,如果你是属于习惯于停留在舒适区的人,可以找一份有挑战性的工作,换个环境,迫使自己去学习和成长。
程序员每天会逛技术社区和技术网站,看到干货总会有点兴奋,不过没有几天便将内容忘得一干二净。
不妨养成每天记录的习惯,利用工具保存到了云端。
并且定期将这些东西整理,条理化,整理成技术博客文章,这样的阅读更能自成体系。
掉头发,颈椎病,这是不少程序员会面临的问题。
每天抽出一些时间进行运动,因为健康的身体本身就是生产力。
日常工作中应该每隔一段时间起来活动一下身体,拉伸一下腰背部的肌肉,这样可以起到很好的放松和缓解疲劳的作用。除此之外,也要加强腰背部的肌肉锻炼,小燕飞、平板支撑、硬拉,山羊挺身等都是很好腰背部肌肉锻炼动作。
首先你得明白,一个人的能力就像一个池塘,不断的输入又不断地输出,水池的容量以及水的质量决定了输出的高效与否,输入大于输出,你的池塘就会不断扩大,换句话说你会的技能就越来越多,只输入不输出,你的池塘就是一滩浑浊不堪的死水,一实操就bug满屏。
所以想要提升自己,就得同时做好输入和输出这两块。而输入又在输出之前,要想提升自己,首先就得做好输入,学习更多的深度知识。
总之,程序员要想学习效率高,学习效果好,只需要做好下面两点最基础的事情:
其中学习基础知识,又有两点要注意的:找对方向、用对方法。说的更直白一点就是学什么以及怎么学。
学什么?
首先要将基础打牢固,最基本的算法和数据结构一定要滚瓜烂熟,拿起来就能用。
比如下面这些个算法和数据结构类型就一定要熟练掌握。
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
不要小瞧了这小小二十组词,展开了去学,怎么都得花你个一年半载,例如单单排序算法就又可以分为以下十种:
然后,当将这些基础知识吃透了之后,注意是吃透,至少得做到要用到的时候就能直接用不用回去再翻书,你就可以去学习一些更深入的内容:
比如:
·编程框架是如何运转起来并输出“Hello World”的?
·如何让自己更正规,更有章法地使用Mysql呢?
·Key、List、Hash、Set、ScoreSet各自的使用场景有何不同?
·主流的编程框架都和设计模式相关,那他们有没有共通性?
当你把这些问题想清楚了的时候,你的程序员进阶之路就走了一半了。
每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。
但是以下的方法我i觉得会让事倍功半,建议大家就不要这样做囖。
刚开始不会做只有跟着别人敲,这不是问题,问题是跟着别人敲了之后你要自己理解自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了让你看得仔细点,练了打字外并没有其它任何帮助。
因为模仿复现不是关键,思考才是关键。你要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。只有这样,你的学习才是有效的。
这一块的情况稍微少见,但也不是没有,有的人急于求成,学习只学个大概只求个会用,没有做到知其然还知其所以然。
技术这玩意儿,不是看了个大概能照着做就会了,一口气吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。
说完了第一点如何学习基础知识,接下来说说第二点如何巩固基础知识。方法千千万,最有效的我认为还是刷题,有方法的刷题。
下面这个刷题方法很普通但也很实用,推荐给你:
第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。
在这里,给大家推荐两本书还有一些学习网站,能够让大家学得更轻松些。
书:
1、《代码大全》激发你的思维并帮助您构建高品质的代码。
2、《程序员修炼之道》全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。
网站:
GitHub — 开发者最最最重要的网站:https://github.com,能学习但不只是学习。
W3school — 最适合新手的网站:https://www.w3school.com.cn/:免费而且全面。
3.实验楼 — 一个在线编程学习网站: https://www.shiyanlou.com/courses/,很方便实用。
Code School — 一个英文学习网站:https://www.pluralsight.com/codeschool,支持分阶段挑战。
讲完学习基础知识和巩固基础知识,咱们就再回到咱们刚开始说的那个池塘,现在水的输入讲完了,池塘里有点东西了,但只进不出还是一潭死水,接下来就系统性的讲讲如何输出。
田纳西大学助理教授奥斯汀·亨利结合自身经验,给出了一份“程序员都应该尝试的挑战性项目”清单,包含下面六个项目,我之前做了一遍觉得还不错,推荐给大家:
·文本编辑器
·2D游戏-太空侵略者
·编译器-Tiny BASIC
·迷你操作系统
·电子表格
·电子游戏机模拟器
每一个项目都存在不同的挑战,比如文本编辑器就要求在不使用GUI框架中内置的文本框组件的情况下,搭建支持光标移动、选择、插入和删除操作的文本框并将文本文档存储在内存中。
如果你能解决掉这些项目中的这些问题,然后把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。
大家想必都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。
也算是一种不错的实操方式了,能让你的基础更加牢固。
这是三种方法中实操性最强的一种了,没有之一。
而且不用说,这也是最快最有效的方法了,毕竟编程这件事,光有理论是不够的,动手实践才是关键也是最终目的。
但兼职也有很多坑很多小门道,你首先得注意项目是不是靠谱,像那种没有需求文档的就不要接了。
最后,在这个不断做不断输出的过程中,希望你能做到下面三点:
·让编程成为一种习惯。
·学练结合,从做项目中找知识漏洞。
·思考更深层次,更底端的东西。
因为只有这样,你的这方池塘才能生生不息,源源不绝。