你好,我是陈震霖,英文名Seven。我目前在完美日记工作,刚加入完美日记不久。个人经历了2019年的巨大变故,2020年决定重新加入一家公司做程序员,我非常幸运地加入了完美日记这家公司。在公司工作了三个星期,熟悉了公司的技术架构,相关制度,开发流程以及完整的wiki文档,让我对公司的技术以及发展有了一个比较清晰的脑图。同时也有幸加入了公司开通的极客时间中学习陈皓的左耳听风系列课程,课程的标题是“洞悉技术的本质,享受科技的乐趣”,而我在本系列课程的学习笔记中,则定义了我自己的标题为“洞悉技术的本质,提高程序员生产力”,很明显我的主题是提高程序员的生产力,同时也是提高我的个人生产力。本系列的学习分享会每周发布一篇文章,共15或16篇文章左右,这篇文章是本系列分享的开篇,下面进入本次分享的正题。
在学习左耳听风系列课程之前,我也曾经想过如何通过自己的技术来获得来自工作之外的报酬。在百度去搜索程序员如何接私活来赚外快,搜索到的信息无外乎是去猪八戒或者一些众包平台接一些项目来做,我真正去尝试过一些,但是靠个人接执行起来的难度非常高,这里我不是说技术的难度,我主要谈的是开个人很难获得如何获得正向反馈,没有良好的工作环境和团队氛围以及其他各方面的阻力会让自己一个人很难坚持下去,而且这些项目可能根本无法提高个人的技术和其他方面的能力,对个人的未来不能产生价值。
那么,程序员如何用技术来变现呢?这里分享我学习左耳听风中提到的方法和手段,同时也分享我自己的一些思考。
首先,程序员通过技术来变现不是一蹴而就的事情,需要经过一定时间的积累才能产生质变。所以我们在工作和生活的过程中需要不断积累,保持不断学习的能力,遇到问题或新技术要用自己的方式方法记录下来,这在未来会产生很大的价值。保持对技术的热情,提高对项目工作中遇到问题的嗅觉,提高对新技术的敏锐感,善于记录,善于分享,让更多外部的人注意到你,慢慢形成自身影响力,时间久了就会产生效益。成功永远是靠一个一个的小成功积累而来的。
什么东西是有价值的呢?供大于求则没有价值,供不应求则有价值。
首先要关注市场需求,了解目前的公司都在做什么,他们遇到的难题是什么,解决得怎样?现在公司缺人的真相是缺少有能力能够解决技术难题的人,能够提高团队人效的人。所以你需要学习那些真正“供不应求”的技术和能力。
其次要关注技术趋势,要做到关注技术趋势就需要对技术的发展历史有所了解,要看一个新的技术是否顺应技术发展趋势,你需要将一些老技术的本质吃得很透。
因此,在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式?”另外,还有一个简单的判断方法,如果一个新的技术顺应技术发展趋势,那么在这个新的技术出现时,后面一定会有大型的商业公司支持,这类公司支持得越多,就说明你越需要关注。
在一家大公司中,技术架构和业务已经定型,基本上没有什么太多的事可以做的。刚起步的公司业务还没有跑顺,公司的主要精力放在业务拓展上,这个时候不需要很高精尖的技术,所以程序员的价值也很难体现出来。
只有在那些高速发展中的公司,程序员的价值才能被最大化地体现出来,如果你有幸加入到一家快速发展中的公司一定要争取让自己的价值最大化。完美日记目前也是一家正在快速发展的公司,所以一定要把握住机会。
给初入职场的程序员的建议是先进入大公司学习大公司的技术和成功的经验方法,然后再找到高速成长的公司,这样你就可以实现自己更多的价值。
程序员是手艺人,靠手艺赚钱,所以动手能力非常重要。在解决一个关键问题的时候,有没有很强的动手能力是解决问题的关键,所以程序员不能停下来,需要一直写代码。所有业务的具体细节实现都在代码里,细节是非常重要的,只有了解细节才能提出更好的可以落地的解决方案。
要通过技术付费来赚取报酬,信任是前提。那么要让别人信任你,就需要提升自己的能力和经历,别人通过查看你的个人履历才能提高对你的信任感。
这里分享一点我面试完美日记这家公司的感受,在面试初期和背景调查阶段,我个人认为很大程度是由于我在过去一家公司的经历,在过去一家公司给了我质的飞跃,成长非常大,同时原公司的同事对我的评价和认可度都非常高,这在一定程度上提高了完美日记对我的信任度。
现代社会信息量非常庞大,甚至有人提出了信息碎片化的概念,信息多到接收不过来,但真相是有价值的信息并不多。对于技术人员来说,几乎所有的技术都来自西方,所以你应该走到信息的源头去获取第一手资料,多使用Google搜索,提高你的英文阅读能力去阅读技术英文文档,你会收获非常大。
只有输出你的观点和价值观才能获得真正的影响力。但是持续地输出并不是一件容易的事,这需要你不断积累和经历,如果要能使你的技术变现,那你需要持续不断地输出,这个过程非常地枯燥无味,并且在很长一段时间都无法变现,你需要有足够的耐力,克服人性的弱点,事实上大部分人都很难坚持下来,包括我也是。但是如果坚持下来了,并且形成了个人影响力,那后面变现将是颠覆性的,翻倍地增长,所以技术变现本质上是一个厚积薄发的过程。
一个人的朋友圈很重要,你在什么样的朋友圈,就会被什么样的朋友圈所影响。
优质的朋友圈基本上都有这样的特性。
l 这些人都比较有想法、有观点,经验也比较丰富;
l 这些人涉猎的面比较广;
l 这些人都有或多或少的成功;
l 这些人都是喜欢折腾喜欢搞事的人;
l 这些人都对现状有些不满,并想做一些改变;
这些人都有一定的影响力。
最后有个关键的问题是,物以类聚,人以群分。如果你不做到这些,你怎么能进入到这样的朋友圈呢?
美国知名征信公司 Equifax其系统中使用了Apache Struts开源框架,但由于没有及时升级Apache Struts框架版本,导致黑客利用了其系统中未修复的 Apache Struts 漏洞(CVE-2017-5638,2017 年 3 月 6 日曝光)来发起攻击,造成大范围的用户数据泄露,影响用户数量达1.43亿之多。
从Equifax数据泄露事件总结出三点经验:
1.使用开源的框架必须实时关注其动态,特别是安全漏洞方面
2.任何公开的入口,都必须进行严格的安全检查
3.框架的选型十分重要,必须将安全考察进去
l 黑客窃取数据的方式有哪些?
1.利用程序框架或库的已知漏洞
2.暴力破解密码
3.代码注入:通过程序员代码的安全性问题,如 SQL 注入、XSS 攻击、CSRF 攻击等取得用户的权限。
4.利用程序日志不小心泄露的信息
5.社会工程学:通过向公司员工发送钓鱼邮件
6.数据管理问题
1.只有一层安全
2.弱密码
3.向公网暴露了内部系统
4.对系统没有及时打安全补丁
5.安全日志被暴露
6.保存了不必要保存的用户数据
7.密码没有被合理地散列
l 手段和方法
1.理解你的软件产品中使用了哪些支持性框架和库,它们的版本号分别是多少。时刻跟踪影响这些产品和版本的最新安全性声明。
2.建立一个流程,来快速地部署带有安全补丁的软件产品发布版,这样一旦需要因为安全方面的原因而更新支持性框架或库,就可以快速地发布
3.所有复杂的软件都有漏洞。不要基于“支持性软件产品没有安全性漏洞”这样的假设来建立安全策略
4.建立多个安全层
5.针对公网资源,建立对异常访问模式的监控机制
l 技术上的安全做法
1.把关键数据隔离出来
把关键数据放在一个具有安全审计、安全监控、安全访问的区域,对于这个区域内的敏感数据只进不出
2.对于关键信息的返回需要打“马赛克”,同时在传输层需要加密传输
加密算法采用非对称加密,同时设置秘钥的有效期,过期则自动更换
3.对加密的秘钥一定要做到随机生成
更换秘钥需要做到双因子认证和更为严格的物理认证等措施
l 第一阶段:野蛮开采:这个阶段的主要特点是资源过多,只需要开采就好了
l 第二阶段:资源整合:在这个阶段,资源已经被不同的人给占有了,但是需要对资源整合优化,提高利用率。这时通过管理手段就能实现
l 第三阶段:精耕细作:这个阶段基本上是对第二阶段的精细化运作,并且通过科学的手段来达到
l 第四阶段:发明创造:在这个阶段,人们利用已有不足的资源来创造更好的资源,并替代已有的马上要枯竭的资源。这就需要采用高科技来达到了。
l 目前我们国家正在处于一种野蛮开采的阶段。
l 尊重技术,追求核心基础技术。
l 追逐自动化的高效率的工具和技术,同时避免无效率的组织架构和管理。
l 解放生产力,追逐人效的提高。
l 开发抽象和高质量的可以重用的技术组件。
l 坚持高于社会主流的技术标准和要求。
l 能够发现问题
l 能够提供解决问题的思路和方案,并能比较这些方案的优缺点
l 能够做出正确的技术决定
l 能够用更优雅,更简单,更容易的方式来解决问题
l 能够提高代码或软件的扩展性、重用性和可维护性
l 能够用正确的方式管理团队
l 创新能力
首先需要吃透基础技术,基础技术就好比是地基,要想楼房盖得高,地基必须要打好。其次是提高自己的学习能力,第三要坚持做正确的事,第四用高标准来要求自己,第五同时要提升自己的软技能。
第一:要吃透基础技术
编程:
①C语言:推荐书籍:《C 程序设计语言(第 2 版)》
②编程范式
③算法和数据结构
系统:
①计算机系统原理:推荐书籍:《深入理解计算机系统》
②操作系统原理和基础:推荐书籍:《UNIX 环境高级编程》、《UNIX 网络编程》和《Windows 核心编程》
③网络基础:推荐书籍:《TCP/IP 详解》
④数据库原理
⑤分布式技术架构
第二:提高学习能力
①学习的信息源:常见的信息源有 Google 等搜索引擎,Stack Overflow、Quora 等社区,图书,API 文档,论文和博客等
②与高手交流:学习这些牛人的思维方式和看问题的角度
③举一反三的思考
④不怕困难的态度
⑤开放的心态:实现一个目的通常有多种办法。带有开放的心态,不拘泥于一个平台、一种语言,往往能带来更多思考,也能得到更好的结果
第三:坚持做正确的事
l 提高效率的事
l 自动化的事
l 掌握前沿技术的事
l 知识密集型的事
l 技术驱动的事
第四:高标准要求自己
l Google 的自我评分卡
l 敏锐的技术嗅觉
l 强调实践,学以致用
l Lead by Example。永远在编程
第五:软技能
良好的沟通能力、组织能力、驱动力、团队协作能力
推荐书籍:《技术领导之路》、《卓有成效的管理者》