hawtim.github.io icon indicating copy to clipboard operation
hawtim.github.io copied to clipboard

左耳听风笔记

Open hawtim opened this issue 5 years ago • 10 comments

摘录&知识关联&内化

hawtim avatar Jan 08 '21 14:01 hawtim

程序员如何利用技术变现

  • 先有小成功,先做出一点小成就,慢慢转化为自己的优势,不断通过正反馈 push 你变得更好,获得持续性成长和声望。
  • 关注有价值的东西,关注技术的本质,了解哪些技术是未来的发展方向,先学习,先攻克。因此就会有市场供需,技术趋势上的差异来提高你的价值。
  • 学习技术的时候一定要多问自己两个问题,这个技术解决什么问题,为什么别人做不到,为什么是这么解决的,有没有更好的方式。即 what why how who。
  • 有大公司关注的技术更加值得关注。
  • 找到能体现价值的地方,大公司多数时候只能让你当螺丝钉,但是却有规范的流程。所以先去大公司,然后再去快速发展的公司,最能体现你的价值。
  • 动手能力非常重要,你能全面的 cover 细节,你才能提出更好的,更加靠谱可落地的解决方案。
  • 关注付费技术点,一个是帮别人挣钱的技术,一个是帮别人省钱的技术。
  • 提升自己的能力和经历,别人对你的信任取决你获得的成就。
  • 找到有价值的信息来源,使用谷歌,使用英语搜索。
  • 输出观点和价值观,需要一个持续的过程来输出自己的价值观,继而获得影响力,需要有一个复利增长的过程。
  • 优质的朋友圈,努力让自己变得更优秀,进而进入更加优秀的朋友圈。

hawtim avatar Jan 08 '21 14:01 hawtim

从信息泄露看信息安全

数据泄露攻击

  • 利用程序框架或库的已知漏洞
  • 暴力破解密码,利用密码字典库或是已经泄露的密码来“撞库”
  • 代码注入,如 SQL 注入、XSS 攻击、CSRF 攻击等取得用户的权限。
  • 利用程序日志不小心泄露的信息
  • 社会工程学

数据管理

  • 不能只有一层安全防护
  • 弱密码
  • 向公网暴露了内部系统
  • 对系统及时打安全补丁
  • 安全日志被暴露
  • 保存了不必要保存的用户数据
  • 密码没有被合理地散列

最佳实践

  • 理解你的软件产品中使用哪些框架和库,时刻跟踪影响这些产品和版本的最新安全性声明
  • 建立一个流程,来快速地部署带有安全补丁的软件产品发布版
  • 所有复杂的软件都有漏洞,不要假设其他的依赖都是安全的来建立安全策略
  • 建立多个安全层
  • 针对公网资源,建立对异常访问模式的监控机制

如何践行最佳实践

  • 自动化测试,API 测试,UI测试,集成测试,单元测试
  • 人工测试,覆盖主要和重要的路径

虽然有非常多的技术手段,但是也不能保证 100% 防止。

  1. 技术手段只能说尽量的提高黑客入侵的门槛,当黑客的投入和收益大大不相符时,黑客也就失去了攻击的意义
  2. 安全的另一方面是风控,通过技术手段控制数据泄露的范围。

hawtim avatar Jan 08 '21 15:01 hawtim

技术领导力

何为技术领导力

国内和国外的技术环境差异

  • 中国的基础技术还在发展中,所以简单的业务增长方式显得有效
  • 国外的技术已经比较成熟,更加关注精细化的技术深度带来的收益

人类社会的发展阶段可以概括为: 野蛮开采, 资源整合,精耕细作,发明创造。

外国的大公司FAANG,最终都会去发展自己的核心技术,提高自己的技术领导力,从早期的业务型公司转变成为技术型公司的原因。

那些本来技术很好的公司,比如雅虎、百度,在发展到一定程度时,将自己定位成了一个广告公司,然后开始变味、走下坡路。

尊重技术的公司和不尊重技术的公司在初期可能还不能显现,而长期来看,差距就很明显了。

技术领导力不仅仅是呈现出来的技术,而是一种可以获得绝对优势的技术能力。

我们可以看到的技术领导力是:

  • 尊重技术,追求核心基础技术。
  • 追逐自动化的高效率的工具和技术,同时避免无效率的组织架构和管理。
  • 解放生产力,追逐人效的提高。
  • 开发抽象和高质量的可以重用的技术组件。
  • 坚持高于社会主流的技术标准和要求。

如何拥有技术领导力

我认为,这世界的技术有两种,关键技术,工程技术,对于后者,所有的工程师都有机会。

以下这些特质可以体现技术领导力

  • 能够发现问题。能够发现现有方案的问题。
  • 能够提供解决问题的思路和方案,并能比较这些方案的优缺点。
  • 能够做出正确的技术决定。用什么样的技术、什么解决方案、怎样实现来完成一个项目。
  • 能够用更优雅,更简单,更容易的方式来解决问题。
  • 能够提高代码或软件的扩展性、重用性和可维护性。
  • 能够用正确的方式管理团队。所谓正确的方式,一方面是,让正确的人做正确的事,并发挥每个人的潜力;另一方面是,可以提高团队的生产力和人效,找到最有价值的需求,用最少的成本实现之。并且,可以不断地提高自身和团队的标准。
  • 能够使用新的方法新的方式解决问题,追逐新的工具和技术。

培养自己的技术领导力

  • 扎实的基础技术;
  • 非同一般的学习能力;
  • 坚持做正确的事;
  • 不断提高对自己的要求标准;

hawtim avatar Jan 08 '21 15:01 hawtim

技术领导力-下篇

“扎实的技术基础对应,吃透基础技术,基础技术是各种上层技术共同的基础。”

基础技术分为编程和系统

  • 编程部分

即 C 语言(底层)、编程范式、算法和数据结构。

  • 系统部分

分为计算机系统原理,操作系统原理和基础,网络基础,数据库原理,分布式技术架构

以上的基础知识都不是可以速成的,需要用一生的时间来学习,所以说做好自己的职业生涯规划很关键,做好长期持续学习的准备,并且随着自己的阅历和经验的增加,你会对这些只是有不同的理解和感悟,逐步内化成自己的思想体系。

“提高学习能力,能够很快低”

  • 学习的信息源
  • 与高手交流
  • 举一反三的思考
  • 不怕苦难的态度
  • 开放的心态

“坚持做正确的事情”

  • 提高效率的事
  • 自动化的事
  • 掌握前沿技术的事
  • zhi's
  • 技术驱动的事

“高标准要求自己,不断地提高标准,你才可能越走越高”

  • 谷歌自我评分卡
  • 敏锐的技术嗅觉
  • 强化实践
  • lead by example 永远在编程,保持对代码细节的敏感

附 Google 评分卡

0 - you are unfamiliar with the subject area.

1 - you can read / understand the most fundamental aspects of the subject area.

2 - ability to implement small changes, understand basic principles and able to figure out additional details with minimal help.

3 - basic proficiency in a subject area without relying on help.

4 - you are comfortable with the subject area and all routine work on it:For software areas - ability to develop medium programs using all basic language features w/o book, awareness of more esoteric features (with book).For systems areas - understanding of many fundamentals of networking and systems administration, ability to run a small network of systems including recovery, debugging and nontrivial troubleshooting that relies on the knowledge of internals.

5 - an even lower degree of reliance on reference materials. Deeper skills in a field or specific technology in the subject area.

6 - ability to develop large programs and systems from scratch. Understanding of low level details and internals. Ability to design / deploy most large, distributed systems from scratch.

7 - you understand and make use of most lesser known language features, technologies, and associated internals. Ability to automate significant amounts of systems administration.

8 - deep understanding of corner cases, esoteric features, protocols and systems including “theory of operation”. Demonstrated ability to design, deploy and own very critical or large infrastructure, build accompanying automation.

9 - could have written the book about the subject area but didn’t; works with standards committees on defining new standards and methodologies.

10 - wrote the book on the subject area (there actually has to be a book). Recognized industry expert in the field, might have invented it.

Subject Areas:

  • TCP/IP Networking (OSI stack, DNS etc)
  • Unix/Linux internals
  • Unix/Linux Systems administration
  • Algorithms and Data Structures
  • C
  • C++
  • Python
  • Java
  • Perl
  • Go
  • Shell Scripting (sh, Bash, ksh, csh)
  • SQL and/or Database Admin
  • Scripting language of your choice (not already mentioned)
  • People Management
  • Project Management

hawtim avatar Jan 21 '21 15:01 hawtim

每个程序员都该知道的知识

每个程序员都应该要读的书

  • 代码大全
  • 程序员修炼知道
  • 计算机的构造和解释
  • 算法导论
  • 设计模式
  • 重构
  • 人月神话
  • 代码整洁之道
  • Effective C++
  • Unix 编程艺术

每个搞计算机专业的学生应有的知识

首先,对于我们每个人来说,作品集(Portfolio)会比简历(Resume)更有参考意义。所以,在自己的简历中应该放上自己的一些项目经历,或是一些开源软件的贡献,或是你完成的软件的网址等。最好有一个自己的个人网址,上面有一些你做的事、自己的技能、经历,以及你的一些文章和思考会比简历更好。

其次,计算机专业工作者也要学会与人交流的技巧,包括如何写演示文稿,以及面对质疑时如何与人辩论的能力。

最后,他就各个方面展开计算机专业人士所需要的硬技能:工程类数学、Unix 哲学和实践、系统管理、程序设计语言、离散数学、数据结构与算法、计算机体系结构、操作系统、网络、安全、密码学、软件测试、用户体验、可视化、并行计算、软件工程、形式化方法、图形学、机器人、人工智能、机器学习、数据库等等。详读本文可以了解计算机专业知识的全貌。

高效的 Code Review 技巧

LinkedIn’s Tips for Highly Effective Code Review,LinkedIn 的高效代码复查技巧。

https://thenewstack.io/linkedin-code-review/

编程语言和代码质量的研究报告

A Large-Scale Study of Programming Languages and Code Quality in GitHub,编程语言和代码质量的研究报告。

https://cacm.acm.org/magazines/2017/10/221326-a-large-scale-study-of-programming-languages-and-code-quality-in-github/

hawtim avatar Jan 24 '21 14:01 hawtim

答疑解惑

为什么你能够写出这么多东西

几个阶段

  • 学习的阶段
  • 利益驱动的阶段
  • 记录自己观点打自己脸的阶段
  • 与他人交互的阶段

怎样选择自己的人生和职业发展

人生分为两个阶段

  • 20 - 30 岁,打基础的阶段
  • 30 - 40 岁,人生发展的阶段

其他角度的建议

  • 客观的审视自己。找到自己的长处,隔三差五出去面试一把感受下自己的市场定位
  • 确定自己想要什么。不受别人的情况所影响你决定的那种渴望,就可以理解为是你真的想要的东西
  • 注重长期的可能性,而不是短期的功利。趁着年轻多去做哪些有挑战的事情,能给自己带来更多可能性的事情。开阔眼界最重要
  • 尽量关注自己会得到的东西, 而不是自己会失去的东西
  • 不要和大众的思维方式一样。 因为绝大多数人是平庸的,所以如果你的思维方式和大众一样,你的选择就与大众一样(最后成为平庸)

编码能力很重要,但是技术视野、技术洞察力,以及我们如何用技术解决问题的能力更为重要。

hawtim avatar Jan 24 '21 14:01 hawtim

如何成为一个大家愿意追随的 leader

boss 和 leader 的差别

image

如何成为愿意追随的leader

  • 帮人解决问题
  • 被人依赖
  • 有技术领导力

技术领导力之外的素质

  • 赢得他人的信任
  • 开放的心态 + 倾向性的价值观(对新技术开放的心态 + 在一些事情上有自身的倾向)
  • Lead by example 言传身教、终身写代码、用更多的实际经验来 明白一个技术的优缺点、复杂度、best practice
  • 保持热情和冲劲(正视错误,从中进行反思和总结得到更好的解决方案)
  • 能够抓住重点,看透事物的本质
  • 描绘令人激动的方向,提供令人向住的环境
  • 甘当铺路石,为他人创造机会

也许,你不必做一个 Leader,但是如果你有想跟随的人,你应该去跟随这样的 Leader!

hawtim avatar Jan 24 '21 15:01 hawtim

错误处理的最佳实践

  • 统一分类的错误字典
  • 同类错误的定义最好是可以扩展的
  • 定义错误的严重程度
  • 错误日志的输出最好使用错误码,而不是错误信息
  • 忽略错误最好有日志
  • 对于同一个地方不停的报错,最好不要都打到日志里
  • 不要用错误处理逻辑来处理业务逻辑
  • 对于同类的错误处理,用一样的模式
  • 尽可能在错误发生的地方处理错误
  • 向上尽可能地返回原始的错误
  • 处理错误时,总是要清理已分配的资源
  • 不推荐在循环体内处理错误
  • 不要把大量的代码都放在一个 try 语句块内
  • 为你的错误定义提供清楚的文档以及每种错误的代码示例
  • 对于异步的方式,推荐使用 promise 模式处理错误
  • 对于分布式的系统,推荐使用 apm 相关的软件

hawtim avatar Jan 24 '21 15:01 hawtim

时间管理

主动管理

  • 说明自己不想被打扰、在家办公、找别的地方工作
  • 公开自己的工作日程
  • 邮件标题聚合和自动化分类邮件

你要主动管理的不是你的时间,而是管理你的同事,管理你的信息。

学会说不

  1. 面对你做不到的需求时,不要说做不到,而是要先想一想,并且给出另外一个你可以做到的方案,而不是回绝掉对方的方案
  2. 面对复杂的需求的时候,要反问一下,为什么,目的是,然后给出自己的方案,或者性价比更好的方案,提供部分的满足
  3. 当时间完全不够的时候,你要把压力还回去,或者让对方与你一同分担这个压力。

我惯用的方式是给回三个选择:

a. 我可以加班加点完成,但是我不保证好的质量,有 bug 你得认,而且事后你要给我 1 个月的时间还债。

b. 我可以加班加点,还能保证质量,但我没办法完成这么多需求,能不能减少一些?

c. 我可以保质保量地完成所有的需求,但是,能不能多给我 2 周时间?

加班和开会

在国内的公司,老板们看到团队在拼命加班,会很高兴。

在国外的公司,老板看到团队在拼命加班,会觉得这个团队一定是哪里出了问题,老板会比较焦虑。

加班和质量的权衡。如果怎么做都要受伤害,那么两害相权取其轻。

开会,不是讨论问题,而是讨论方案,开会不是要有议题,而是要有议案。

hawtim avatar Jan 24 '21 16:01 hawtim

如何利用好自己的时间

投资自己的时间

  • 花时间学习基础知识,读文档
  • 花时间在解放生产力的事情上面,在自动化、可配置、可重用、可扩展上要多花时间
  • 花时间在成长的事情上,在整个行业内的成长才算是成长
  • 花时间在建立高效的环境上,将自己的工作环境变成最高效的,去影响你的同事配合实现更好的流程和管理方法

规划好自己的时间

  • 定义优先级
  • 最短作业优先
  • 想清楚再做
  • 关注长期利益规划

你要学会规划自己的行动计划,不是短期的,而是一个中长期的。我个人建议是按季度来规划,这个季度做什么,达到什么目标,一年往前走四步,而不是只考虑眼下。

用好自己的时间

  • 确定自己的目标,专注达到这个目标,而不是分心。多花时间在有产出的事上,少花时间在说服别人的事上。
  • 形成习惯
  • 形成正反馈
  • 反思和举一反三。可以尝试每周末花上点时间思考一下,本周做了哪些事儿?时间安排是否合理?还有哪些可以优化提高的地方?

hawtim avatar Jan 31 '21 10:01 hawtim