最近的半年的总结

在 Github 上修改

前言

写这篇文章中心中也是思绪万千,最近做的事情很多,成长也蛮大。所以自己一直想把自己最近做的事都写出来,可是真正开始写的时候,又不知从何写起。

做好项目规划真的很重要

最近一年负责的项目运营的还不错,现在大概每天能有亿级流量。当时是为了快速开发,就用PHP做了一个最小可用版本。上线之后运营那边数据很好,每天都能有10万+的新增,用户粘合性也比较高,所以就开始迭代。因为自己是第一次用0-1把控整个项目,再加上是为了抢占用户红利快速开发,很多事情提前都没有架构好。所以可想而知,迭代几个版本后维护成本急剧增加。每次改版或者发布新功能都要小心翼翼,生怕影响到哪儿导致出致命bug。好在及时感知到了问题所在,在不影响新功能开发的情况下,我加班加点重新梳理规划了项目。规划后感觉一切都明朗了起来,维护起来也不是那么困难了,开发效率也提高了很多。

基础重要吗

之前看过TCP/IP详解,当时觉得很枯燥不懂为什么要学习这枯燥的理论知识,一点都没有编程好玩。好在我还是按照书上的知识一个一个的学习起来了,对应的练习题也写了七七八八。年前做性能调优的时候遇到几个服务器问题,其中有几个是关于TCP的问题,然后发现当初我看那本早已不知道放哪儿吃土的TCP/IP详解竟然派上了很大的用处。像基本的TIME_WAIT过多、连接队列积压过多、溢出等可以排上用处,更有像系统调用、上下文切换也和TCP有关。没想到当初觉得枯燥而随便看看的书,竟然能派上这么大的用处,至那以后,我才算真正的看进去那本书了。
所以我们面临一个技术时,如果觉得它枯燥或者是生涩难懂,那么可能是你现在还不适合读这本书,很难和作者达到共鸣,等到和作者达到共鸣,然后带着问题或者疑问去看的时候,看到里面有解决你心中的疑问或思考时,那种理性和感性的双重认识真的很爽,看书也变得有滋有味。
之前一直面试的时候经常被问到一些关于大流量网站的处理、高并发、分布式、负载均衡、监控、熔断、降级、限流等等问题。因为之前没有处理过较大流量的网站,关于大流量网站的处理的知识全来自自己看过的书,或者听过的公开课,所以自己对这些也是知之甚少,而且有些东西只知道表面。 后来着手做一些关于分布式的相关处理时,一开始压力其实蛮大的,一边学习着一边规划着做。后来慢慢的也做下来,此次过程中我发现分布式的一些问题和我之前学习的计算机的操作系统有很大一部分类似,包括lock,同步互斥,进程之间的通讯、共享内存等,无奈操作系统学的不是很好,未能反补到分布式架构上。当初计算机刚刚出现的时候是很贵的,所以程序员们会想方设法的提高计算机的利用率,一台机器往往会有很多用户共同使用工作,所以会解决一些多用户并发并行执行任务等思想,很适合嫁接到分布式上面。关于分布式的技术栈是很大的,我目前也是在学习当中,所以就不描述分布式的一些实现,google上面有很多论文可以参考。

程序员的荒谬之言还是至理名言

引用这个标题其实是在耗子叔的coolshell上看到的一篇文章 程序员的谎谬之言还是至理名言? 还有这篇传世之文也推荐阅读一下 What every computer science major should know 很多网上关于职业发展的文章上都有谈“到带着问题去学习,会学的更快。” 但是我发现很多人误解成了“遇到问题了再去学习,会学的很快。”确实,遇到问题了你不得不学,可能会比你自主学习快。但事实是谁给你时间让与遇到问题了去学习?公司会吗?显然公司不会。公司肯定从无论是从公司的利益考虑还是其他方面考虑肯定都是让你解决问题,而不是遇到问题了去学习怎么解决问题然后再去解决。你可以耽搁的起事件,但是往往公司可能会因为这个问题造成巨大的损失,公司是耽搁不起的。 如果是你自己遇到问题了,你自己可能会给你事件让你带着问题去学习。拿我举例,我之前就是带着问题一遍学着一边做。遇到问题其实不可怕,因为问题伴随着的往往是机会。可是如果你解决不了是人没有机会给你的,我这面呢一是我态度比较好,自学能力和抗压能力都比较强,二是公司这块也缺人,如果公司不缺人我觉得也没有我的什么事了。因为我目前的能力负责这块确实不能应付自如。所以不可能每个人都有机会等用到时再去学,一般都是行你就上,不行就下来。所以很多时候我们应该要提前准备好,职业危机感也要有的,而不是等到自己遇到问题了才想着去翻书本,被辞退了才想着学补算法。

2019期望

说一下今年的个人学习计划吧,期待明年来打脸;
1.是学习基础知识,新技术往往运行在底层知识之上的,是变化很快的,唯一不变的可能就是一些底层知识,所以学好底层知识才能在这个快速变化的行业中跟的上脚步。
2.学习好行业知识,不要等到用的时候才发现这个不会
3.加入了耗子叔组织的学习小组,跟着大家一起学习 针对上面点细化一下
1.学习计算机操作系统,复习C语言用C语言写一个小型的OS系统
2.学习计算机网络编程
3.使用golang为目前负责的项目重构一版
4.每周分享一篇有观点和思考的技术文章 5.每周至少做一个 leetcode 的算法题
6.每周阅读并点评至少一篇英文技术文章
7.每周学习至少一个技术技巧
学习参考:
操作系统原理
深入理解计算机操作系统
操作系统(自主模式)
TCP/IP详解
UNIX环境高级编程
UNIX网络编程