zoukankan      html  css  js  c++  java
  • 知乎LIVE-宋文峰《如何成为一名优秀的程序员》--参考记录

    【一个矛盾】
    前期主要是基础的查询算法,而且都是调用底层库;时间长了反而会觉察到底层的算法运用的多
    多年工作经验的工程师,底层的算法与逻辑不怎么样
    刚出炉的工程师,基础知识很溜,但工程经验很匮乏
    --
    所以工作时间长了,越长很多时候基础反而越重要--后面会有怎么学的说明
    复习经典教材,新出来的协议要研究,工作中要有探究的精神。
    HTTP协议,真正理解的通透的,十分之三

    【什么是资深】
    解决有难度的问题,需要长时间的经验,需要基础知识的铺垫-
    1.如大并发的经验,数据库与系统的优化;
    2.在长期维护的项目上,可维护特别重要,只要不是一次性的项目,老手越是能让这个项目改得代价很小,而不是来一次就一次大手术;
    3.项目把控能力--如何控制风险,代码质量,灰度发布,人员管理,营造氛围;
    4.带团队的能力--人带来的不确定性,与人交往
    5.领域知识--如安全,大数据,...

    【技术专家】
    不需要多面,综合,但是需要一个方面特别精通,特别擅长,要解决该领域内特别困难的问题。如果脱离了大公司,该岗位可能不好适应市场,就业面窄。

    资深开发需要具备那些素质
    假如你要找一个技术合伙人开始创业,CTO,那肯定需要把这块完全放心地交给他
    从带团队,还是到技术细节,都要能搞定...一定要独当一面

    【资深开发】
    挑大梁
    能满足领导需求的能力

    【学什么】
    两门以上主语言
    底层结构
    常用数据结构
    语言处理细节

    【关于原理性的理解】
    看书--别人的分析,讲解的结构
    做实验--在工作中遇到一点点问题,都去实验。计算机行业的反馈算很快的很容易的了。
    记录--记录代码和结果,结果需要目录--环境,参数以及实验结果,结论(可以长久地检验)

    【看源码】
    先看文档,注释,目录,别人的分析--看结构,看哪部分干嘛的->复杂的框架源码先剖析它的结构,再根据结构,一点点划分出模块,进行细读。
    不要妄图一下看懂所有的源码--啃半年一年很常见
    每次看带明确目的,只看一小部分与该目的相关的代码
    找IDE,配置,把源码跑起来,打断点
    自己看成本高,先看书分析可以节约时间。先摸清楚套路,再自己实验验证。

    【算法】
    目的:需求特殊的时候,要能手动实现高效简洁的结构。
    要能根据自己的知识库,把业务需要的结构,自己造一个结构。要么业务复杂,自己用现有的结构无法完成,或者完成起来非常麻烦,此时就需要自己创造一个结构(此类场景已经遇到过,实现起来用基本的库特别复杂,而且性能上也有要求时,需要自己造轮子了,没有通用的封装)。类似于HashMap中的Node,TreeNode之类的。需要理解结构的本质。

    【算法设计】
    NP问题,背包问题...积累一些思路。

    体现出两个人的素质之一。这是一个体现人的素质的基本手段。而这个是通过一些手段能够达到的。

    【怎么学算法】
    初级--不知道场景,看书
    有经验了--看算法设计
    面对问题,自己想,不要看答案。脱离舒适区去练习。
    看书里的思路,怎么一步一步找到解决方案,到底是怎样从平常想法到这个点上。因为现实场景不会那么典型,需要多个经典的综合运用,所以学经典时思路特别重要。

    【设计模式】
    需要稳定的,长时间的去维护一个项目,才有可能好好琢磨怎么才能学好可扩展,易维护。
    先看,再运用到代码中。改项目代码,再看,再运用到代码中......
    分清主次,看设计模式的思路实现时,要想清楚背后的法则。很多设计模式也是经典,现实中需要组合运用,这里看自己对经典的领悟。
    简单,一要创造条件,二是思考经典,三是运用到代码中。

    【协议】
    TCP,IP,HTTP等协议,必须很懂很懂...
    要从协议本身去分析,这个问题是怎么产生的。

    自己去定协议,怎么办,需要参考

    【系统和软件的源码】
    看OS,增加对OS的理解,可以对系统进行优化。理解不到位的话,一些基础的API都用不好。
    写出性能更好,符合自己预期的代码--了解使用的中间件的逻辑,解决常见的问题。

    自己写框架,前提是看别人的框架。
    推荐程序员写一套自己库和框架。实力和水平达到一定程度的标志--难度稍高的。如JSON的打包和解析。需求千变万化,要在自己写的过程中,慢慢体会到,自己写的能够更好地匹配这场景。

    性能和便捷。

    框架是为了提升开发工程人员的效率。易用性,扩展性,工程人员上手快。这才是架构师的标志。起码要自己用,要大大提升自己的效率。学习别人的框架来提升自己的框架设计水平。

    自己写也能够极大提升对别人框架的理解能力。

    【学习顺序】
    要培养兴趣
    兴趣优先
    用兴趣支持自己走远

    【读书--忘掉--如何高效率】
    要记笔记,笔记要复习--《聪明人都使用方格笔记本》;
    多思考提问,问题多了遇到了解决这个问题的书,那就能大幅度提升共鸣,且容易切入这本书。实际经验产生的问题,比看目录产生问题,要好得多。可以搞一个思考本,把问题都积累下去。
    根据自己的理解整理模块。

    实在没办法--正常流程(未思考过场景)
    看目录提问
    不推荐严格按照顺序。可以根据自己的兴趣跳读。

    想尽各种办法,将自己的知识点运用到项目中去。

    【项目把控】
    尽量领导开发一个项目。
    如果没有这个机会,自己搞一个私有的,想想怎么提高开发项目效率,快速迭代,提升代码质量,提升交付能力。
    尽量关心别人的实现,关注整个项目的开发情况。

    面对结果未知,要强化自己的信心,相信不比任何人差。所谓的天赋,是让人更容易在某个领域形成正反馈而已,容易付出更多努力。

    要用到工作中,这个对兴趣提升有很大地促进。

    【大脑的保护】
    作息。
    随便就打乱这种作息的公司,如果经常加班到11点之后,果断跳槽。
    高强度学习和工作。分配时间来闭关(关闭手机和断网),进行深度思考。
    早晨或者晚上,找一个无人打扰的时候,来深度阅读与思考。
    不要没事就刷知乎,微博,头条等。一地渣的知识点,对自己的提升很少,但是巨消耗时间。
    注意饮食结构。

    【关于私心】
    公司与自己的目标不一致时怎么办?
    对自己的职业规划与成长路径是否一致,如果一致,安心踏实干。如果不一致,仔细思考,不要随便逼着自己喝下鸡汤,考虑能不能兼顾,如果可以,那么不要轻易离职。
    不要太在意眼前的一点钱。
    平衡自我提升和公司的任务。
    加班来解决的问题,都是技术难度比较低的情况。对员工的成长没太大好处,耽误员工的自我提升。超过一年的经验,加班的价值都不大。

  • 相关阅读:
    vim技巧2
    vim技巧1
    网站压力测试工具
    CentOS mysql安装
    破解root
    渐进式性能监测案例
    网络监测介绍
    I/O检测介绍
    虚拟内存介绍
    @Slf4j
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14974594.html
Copyright © 2011-2022 走看看