程序员提问

1. 如何看待英语和数学在编程中的重要性?

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

那英语和数学在编程中的重要性体现在哪里?
    英语:
        1. 专业词汇
        2. 看英语文章
            1. 很多优秀的库和框架或者官方文档都是英文的
            2. 大量的源码中都会用英语作为注释
            3. 很多优秀的问题社区(stackoverflow)也是英文的
            4. 很多时候你也需要写英文文档和英文注释
    数学:
        1. 算法很重要,数学思维和逻辑能力
        2. 很多算法都会有数学公式(机器学习算法尤其突出)
        3. 大量的问题的深入原理背后都是数学支撑的

2. 大公司和小公司更看重什么?

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

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

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

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

4. 职业迷茫的时候应该怎么办?

1. 会在哪些方面产生迷茫?
    方向深入
    换方向
    如何技术变现
2. 迷茫的时候改怎么办?
	1. 学好技术
	2. 关注新领域
3. 技术可以追求一专多能
4. 封装好自己的可重用的代码,为以后工作或者私人项目做准备
5. 变现途径
    
    外包
    长期维护一个自己的项目(开源或者商业)
    程序员客栈
    非it技术类
    数据服务(分词服务,某些难的技术点)

5. 如何构建自己的知识体系?

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. 游戏开发

6. 有哪些高效的学习方法?

如果说学习有一种万能的方法那都是扯淡,不同的学习方法对于不同的人来说效果不一样,不过为了学好编程,有一些常用的方法还是很有效的,大家根据自己的情况可以考虑一下:

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

7. 这两项最重要的技能必须要掌握!!!

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. 看源码(有时候文档无法兼顾所有接口的用法,这个时候需要懂看源码)
没有必要一味的求取看源码和懂原理,先学会使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值