手记

培训班出身如何构建自己的知识体系?

2019-08-23 11:09:5211045浏览

bobby

7实战 · 8手记 · 1推荐
1. 如何看待英语和数学在编程中的重要性?
先给出结论吧: 重要但是不紧急。
英语和数学属于四象限原则中的: 重要但不紧急,同样属于这个象限的还包括基础知识:数据结构、算法、计算机网络、操作系统等
这个象限属于很容易被忽略,大部分人的思维都是把精力放在学习哪些紧急并且重要的知识点上很容易忽略这个象限的知识点,
可以这样一句话描述这个象限的知识点的重要性:其他知识点决定你能走多快,而这些知识点决定你能走多远。
既然这个问题是说明英语和熟悉的重要性,那我们来说一下这两点到底重不重要:
    1. 重要!
    2. 学不好这两门也能学会编程并能达到很多职位的需求
    3. 想要学好编程英语和数学相当有必要
    4. 不一定需要首先学好英语和数学,也可以在学习编程的过程中去学习数学和英语

那英语和数学在编程中的重要性体现在哪里?
    英语:
        1. 专业词汇
        2. 看英语文章
            1. 很多优秀的库和框架或者官方文档都是英文的
            2. 大量的源码中都会用英语作为注释
            3. 很多优秀的问题社区(stackoverflow)也是英文的
            4. 很多时候你也需要写英文文档和英文注释
    数学:
        1. 算法很重要,数学思维和逻辑能力
        2. 很多算法都会有数学公式(机器学习算法尤其突出)
        3. 大量的问题的深入原理背后都是数学支撑的
2. 培训班和自学真的有区别吗?
培训班和自学没有本质的区别:都是要学习!
编程的学习有一个很重要的特性:学懂是第一位
很多知识是属于别人给你说了你就知道了,比如很多库和框架的使用,但是灵活运用需要配合实战项目或者大量的项目反复训练。
另一些知识属于即使讲解了很多人貌似听懂了但实际上没有弄懂,比如很多算法,算法中有一些算法不属于唯一答案,比如动态规划,需要配合大量的题目才能彻底弄懂
还有一些很重要但是不紧急的知识点比如数据库的底层原理,很多库和框架的底层原理(elasticsearch,kafka等),这些很多时候没人能提醒你该学或者告诉你,需要工作中去学习。

其实上面可以看到我们要学习的知识非常多,这些很难在一两年时间内就搞懂。
那接下来我们看看作为初学者,这里说到的初学者不仅仅只是转行或者刚毕业的人,对于有工作经验的人来说,比如andriod开发转python开发,转人工智能开发,这个时候也属于初学者。
对于初学者来说更加紧急和重要的是什么呢(PPT)?
    1. 全面的知识结构体系,比如有哪些实际的项目能锻炼人?每个方向的知识点都很多,但是哪些知识点更重要?哪些是必学的?
    2. 具体到需要学习的知识点的时候?有哪些库或者框架是必学的?

培训班的好处:

    1. 快速建立知识体系结构
    2. 少走弯路(有些弯路一旦走了可能会耽误你1、2年时间)
    3. 培训班教的也是知识,知识不应该计较从哪里来的
    4. 培训班集中的学习时间和氛围是自学比不了的(自学很难达到集中不间断的学习5,6个月)
    5. 明确的目标能让学习更加高效
    6. 好的培训机构和好的老师很重要
    7. 对于转行的人来说,自学难度很大,培训班能够帮你快速入行

培训班的缺点:
    1. 参差不齐的质量
    2. 明确的目的性导致没有大量的讲解重要但不紧急的基础知识
    3. 后续的学习还需要自己
    4. 虽然集中的时间已经很长(5个月以上),但是相对于个人的长期成长需要学习的知识还是很短

个人学习到底有低效相信对于绝大部分的人来说都是很清楚的,但是个人学习依然很重要:
    
    1. 长期不间断的学习
    2. 找一个大牛(工作和生活中)模仿或者交流
    3. 明确自己的目的(比如一个后端需要学习前端,就要集中学习,需要学习人工智能也是一样)
    4. 自学的作用不可替代
    5. 找到适合自己学习的方法
    6. 有些知识点听不懂可能是别人讲不明白,多看看不同人的不同角度的讲解。 不要质疑自学的重要性和能力
    7. 自己没有从事的行业也可以适当关注

3. 为什么培训班出来的就不受待见?

培训班因为是短期内需要帮助找工作所以课程规划的时候更多的是框架和库的使用:
    1. 这样本身没有问题,毕竟绝大部分公司面试还是很看重框架和库的
    2. 底层知识缺乏,很容易导致很多人开始工作能胜任,但是随着系统越来越大,由于缺乏底层导致很多人胜任不了
    3. 培训机构包装简历,能力和简历上的不一样

无论如何,学到了就是学到了,不应该计较从哪里来,为什么很多公司强调不喜欢培训机构出来的,是为了提高招聘效率,不是否认培训机构的作用
就像很多机构招聘喜欢通过学历筛选简历一样,毕竟很多hr面临的是一个绩效问题,所以也喜欢从高概率的人群中去筛选
但是对于有工作经验的人来说,工作经历和项目经历更加重要,所以不用担心将来,现在需要做的就是把知识学到手。

其实招聘公司不喜欢培训机构出来的和很多公司喜欢在学历上卡人是一样的原理:提高筛选效率!
4. 大公司和小公司更看重什么?
大公司:
    算法(只占一部分)
    基础
        计算机网络、操作系统、数据结构、计算机原理等
	框架和库的底层原理(数据库底层存储原理,es和kafka等底层存储原理)
	某些框架的核心流程
    
    原因:大公司有钱等到新人成长学习,更加关心的是遇到问题分析和解决问题的能力,因为大公司开发的项目更加注重稳定性和并发性等,这些问题需要解决会涉及到
           分析底层,分析底层往往需要我们具备底层的基础知识,但是底层基础知识本身比较枯燥而且学习周期长,相比较而已选择更懂底层基础的就显得更加划算了,大公司有很多
           项目都是对大型项目的维护和很多优化工作,这些对基础要求比较高
中小公司:
    实际项目经验
    库和框架的熟悉程度
    
    中小公司面临的是快速开发和新项目的开发过程,没有那么多钱支撑很多新人的学习,要知道程序员一天的工资可不低,在钱不够的情况下还等你学习慢慢学习不现实
    所以要求一上来就开发显得更实际了,很多中小公司新人一进公司(特别是前端)基本上当天就开始写页面,这在大公司不太可能,光是熟悉已有的代码和规范都需要不少时间

大公司和小公司都很重视实际项目经验,但是侧重点可能会不一样(因人和因公司有差异)
大公司和小公司这样筛选无可厚非,小公司面临生存,大公司需要维护和优化

5. 如何避免培训出来以后被歧视?

1. 包装简历(初学者找工作)
	简历是可以包装的,比如工作年限(查学历没办法,但是相关经验年限确可以自己写),所有公司都在意工作年限。
	项目经验可以包装,但是一定不要写的太多,一定要写自己熟悉的和最好是做过的
	有些能吹的不好说(因为有些面试官真的会吃这一套)
2. 巩固基础(工作以后)
	巩固基础是一个长期的过程,想要一下子学好不现实,配合做实际工作学习效果更佳
3. 公司最喜欢招聘的是有相关工作经验的
4. 项目经验很重要,但是要慎重,一旦写上简历了,对方如果对你的项目经验感兴趣会追着问(你遇到哪些问题?是怎么解决的?)

6. 如何在职场上走的更远?

1. 保持学习
    学习是当今以及以后永远不变的一个趋势,只有保持不断的学习才会让我们不会受到年龄的限制和不会被淘汰,it技术尤其明显。低廉的升级成本会导致技术变化很快。所以我们需要保持不断的学习态度。
2. 保持兴趣
    长期学习最大的动力就是兴趣,所以我们需要保持兴趣。兴趣和学习在很大程度上是相互促进的,也就是说兴趣会促进学习,学习也会促进兴趣。
3. 除了做好本职工作以外,可以提出更多的建设性意见
    职场是非常在意产出的,比学习更重要。但是这种产出在很多时候不一定要以技术的方式表现,在中小型公司尤其突出,比如在产品设计上多提一些意见,比如在产品的框架设计上考虑远一点,比如通过技术的手段帮助营销提高效率。这些都不一定是技术产出,但是却决定了你的不可替代性,这里需要重点提醒大家就是:一定要有主动性!!!,很多事情不是主动来找你,而是你主动提出来的!!!,所以不要抱怨你没有机会。
4. 多从产品和测试的角度考虑问题
    产品质量和稳定性不论是对小企业还是大企业来说第一位,质量的保障最重要关卡就是测试,所以对于很多有经验的人来说会把测试看的很重要,很多有经验的程序员在开始写代码之前就会在脑子里过一下应该有哪些测试点,所以对于我们来说也是一样的。
5. 关注架构层面的知识
    
    刚进公司我们把精力都放在自己负责的模块上无可厚非,但是有两三年工作经验以后我们不管是学习还是有新项目的时候我们要多从架构层面去考虑问题:
        1. 可以使用哪些组件?是考虑稳定性?是考虑生态?是考虑性能?
        2. 使用什么语言?优缺点是什么?
        3. 代码和模块设计的时候是否应该考虑到扩展性?
        4. 代码之间如何尽量降低耦合性?
        5. 如何将服务拆分?
        6. 如何让组员之间能够快速的沟通和替换?
7. 职业迷茫的时候应该怎么办?
1. 会在哪些方面产生迷茫?
    方向深入
    换方向
    如何技术变现
2. 迷茫的时候改怎么办?
	1. 学好技术
	2. 关注新领域
3. 技术可以追求一专多能
4. 封装好自己的可重用的代码,为以后工作或者私人项目做准备
5. 变现途径
    
    外包
    长期维护一个自己的项目(开源或者商业)
    程序员客栈
    非it技术类
    数据服务(分词服务,某些难的技术点)
8. 如何构建自己的知识体系?
1. 先语言
2. 有些基础是通用的:
	语法基础
	数据结构
	计算机网络
	操作系统原理
	数据库
	    mysql
	    redis
	    mongodb
	    elasticsearch
	    数据库优化
	    
	基础算法(排序,图,树,数组等)

3. 不同的方向需要学习的差异比较大
	1. web开发
		框架
		高并发
		分布式(分布式锁、哈希一致性)
		各种组件(redis、kafka)
		nosql(mongodb、elasticsearch)
		图数据库(neo4j)
		数据库的原理和各种优化
	2. 数据分析
		机器学习
        numpy
        pandas
        Matplotlib
        
	3. 人工智能
	    深度学习
        高等数学
        线性代数
        统计学
	4. 爬虫
	    计算机网络
        http协议详细
        ip代理原理
        js和html等前端知识
        scrapy等异步爬虫框架
        selenium和动态网页
        抓包
        js逆向
	5. app开发
	    混合开发
        flutter
        react native
        Android
        ios
	6. 物联网开发
	7. 游戏开发
9. 有哪些高效的学习方法?
如果说学习有一种万能的方法那都是扯淡,不同的学习方法对于不同的人来说效果不一样,不过为了学好编程,有一些常用的方法还是很有效的,大家根据自己的情况可以考虑一下:

1. 算法靠刷题(leetcode, kaggle)
	算法最好的掌握方式就是刷题,这点和我们学习基础学科比如数学,物理等一样。我们很难通过具体的实战来概括各种算法
2. 多做项目(架构、代码规范等)
    做项目还是以解决问题为主,兼顾考虑如何提升代码的重用性和稳定性。如果很多项目都是重复的技术点,对于学习来说效率也比较低,但是如何每次做相同的代码都能去重构之前已有的代码对自身学习确是很好的。
3. 关注一些技术博客
    慕课网、微博、知乎、公众号、优秀的github开源项目都是很好的学习地,有时候你关注的某个博客不经意间推的某一篇文章能帮你大忙。也能拓宽你的视野。
4. 写自己的博客,记录下自己的问题和解决过程。
    自己遇到的问题以及解决方案记录下来,不论是对你以后找工作还是分享给别人以及交朋友都是非常好的,甚至可能给你带来意想不到的收获,不过要尽量原创。写博客的过程也能发现自己理解不到位的地方。
5. 多和牛人交流
    这一点放在最后是以为很多人可能都没有机会和大牛一起共事并有机会经常讨论问题,所以如果你遇到了,一定要紧跟着他。长期的共事你会发现你的收获可能远超过上面的方法。
10. 这两项最重要的技能必须要掌握!!!
1. debug和看错误栈

    http://coding.imooc.com/learn/questiondetail/138046.html

    debug是一项非常非常重要的技能,配合debug的是错误栈。
    对于完全不懂编程的同学来说不懂debug和看不懂错误栈可以理解。
    对于已经学过以后还是不知道怎么debug,比如如何打断点?如何进入函数?如何跳过某一行代码?如何执行到下一个断点?如何查看变量的值真的说不过去。这是每个编程人员都应该懂得的基础。
    我不是很建议使用print这种方式去debug的,在pycharm中直接以debug方式运行再好不过了。这点我在我的所有课程中都是尽量使用debug方式讲解的。
    
    错误栈对于debug简直就是标配啊,不要怕错误栈,有错误栈是好事。
    
    
2. 信息搜索(google+stackoverflow)

    我更加推荐使用google(上google也是程序员的一个基本,而且我发现google上python的问题比用百度多太多而且都是很对症的。)
    之前也尝试用google和百度尝试过分别搜索java和python,发现百度搜索java更好用(可能和我搜索的问题有关),但是python一定是google比百度好用太多。
    最好用的就是google里面搜索出来的stackoverflow上的问题。
    
    google搜索也是一种能力,如何去找到自己应该通过哪些关键字搜索也是一种能力。
    
    有很多问题不用搜索答案而是应该找到你自己的答案上的问题,比如自己的代码造成的key error, 如果我们能从错误栈中找到具体是我们自己写的某一行代码出错,这个时候你去google很有可能找不到答案,这种问题解决很简单。
    很多异常比如不是我们自己的代码而是使用的某个库的代码中出现了这个异常那么就可以去google了。
    
3. 看源码(有时候文档无法兼顾所有接口的用法,这个时候需要懂看源码)
没有必要一味的求取看源码和懂原理,先学会使用

···············
欢迎关注课程:

91人推荐
随时随地看视频
慕课网APP

热门评论

手机党阵亡。。。。。

说实话,在开源网站例如 码云,github等等构建自己的架构代码,真不知道如何下手。。。可能是工作时间太短的事

来看看,前几天晚上的直播确实受益匪浅

查看全部评论