Category Archives: 程序人生

跨学科通识

视频地址

所长林超自阅读查理芒格观点后得出的感悟。本课程信奉 实用主义

现实生活中的挑战并不是按照大学学科划分的,但每种学科,都为我们解决问题提供了重要的思维模型

本课程将介绍约22个学科和120个常见思维模型,以及部分应用:

热力学、函数、工程学、复杂性科学、系统论、信息论、会计学、概率论、金融学、生物学、投资学、社会学、管理学、物理学、脑科学、认知心理学、历史学、语言学、逻辑学、经济学、营销学、哲学

大多数人的一生都喜欢用一个单薄的知识结构解决所有问题,这是专业化带来的狭隘思维


像我这样的人才:laughing:(bushi),就应该逐步构建自己的知识体系,哈哈我就是这样做的,我在大一接触了应用数学、博弈论、经济学、投资学、心理学、信息论、运筹学,但是学习方法不对,我需要的不是变成所有领域的专家,而是专精一两门(数据科学+经济学),然后学到其他学科的思考模型,先拿林超大大的课试试水。


20-35岁是人生的黄金时间,抓住啊!

一、熵与热力学

基础知识

S = k * lnW 也可以说熵正比于微状态数

可能性大 = 熵高 = 混乱程度高

这个世界上混乱才是常态,有序需要刻意营造

熵增定律

封闭系统,与外界隔绝,随时间推移趋于混乱。

趋于有序的方法

只要它能正确的做好这两件事,就能使事物变得更加有序。


应用:思维决策层

在”脑子里放一个小人“,判断该不该继续思考数量繁多而无序的念头,就能让思维变得有序,这相当于是在正常人的思维输入输出模型里面又加了一个决策层啊!果然方法论决定对外界的反馈,厉害。


耗散结构

感知和选择需要信息和能量,封闭系统变成开放系统,吸收外界的能量和信息

流水不腐就是一个耗散结构,人体也是,耗散结构是一个动态平衡体,变化又保持一个平衡状态。

运转策略

ps:虽然很多人都是这么做的,但是却没有总结成结论,没有总结成结论,运用的时候就会无效思考,心生犹豫,但若是作为一条公理、定理,一项判断决策,那就非常有价值了!

人们应该把焦点全部放在蓝色部分的因,接纳红色的因,而不是因为红色的果而感到自责,反而阻止了身体继续排出熵。所以鸡汤里面的依靠决心和自责什么的假大空的,其实就是抓错了重点。

我们改变不了整体系统,但我们可以改变 感知+选择 这件事

有些人会困在先天的家庭环境带来的红色的果里,有些人会找到铁饭碗,陷入封闭系统里,这个世界充满辩证法,耗散里的选择才是最关键的,如果落实到具体做法,请看👇

逐渐的,两种模式都会形成坚固的闭环。B模式总会伴随痛苦,反人性,充满困难。

工程学告诉我们如何拆解困难,化为一件件小事,轻松KO。

二、工程学

很多人知难而退,其实是知的不够

工程学的细分专业非常多:生物、农业、分子、土木、软件、森林。。。

这节课将提炼共通的重要方法论:行胜于言、分解结构、量化、列清单、取舍

行胜于言

风口思维找到大方向,高风险,看准下手。

工程思维就喜欢看得见摸得着的,能清楚看清收益回报,也能付出实践的。

我个人还是更喜欢风口思维,因为确实难以忍受搬砖的枯燥,但找对风口后,要见成效确实得搬砖┭┮﹏┭┮

激励来源:

要联系到后面讲的生理学:

内啡肽更长更持久,更有益身心健康,显然搬砖是后者。

人们往往习惯了多巴胺型快乐,它让人兴奋,但持续时间短,消散时会带来失落等负面情绪。

曾经物质不丰富,一般是一连串的内啡肽小快乐才等来一次多巴胺型大快乐。

但如今大刺激唾手可得,导致恶性循环👇:

真正公式:

日常搬砖获得内啡肽型愉悦感,达到了成功再允许自己激发一些多巴胺型的快乐,彻底放松一次

要是没有达到成果,那就忍着,这才是良性循环

工程分解结构

把任意问题拆解,是工程学最核心的思维。

这也有一项孪生能力:focus

focus like a laser, not like a flash

无限分解,直到找到抓手,从想->做就在那一瞬间,在脑科学里就是从一个新脑区的边缘神经元开始激活整个。

既见树木、也见森林

image-20210809170229459

image-20210809170229459

应用:接触全新学科

找到该领域最权威的教材,读目录,建框架

  • 读目录,查清所有不会的术语
  • 推敲概念之间的关系,建立宏观全局框架

这是知的部分,全局了解也是非常重要的。


这才是知行合一,我就是那种喜欢看全局,然后分解不到位,最后懒得搬砖的人哈哈哈

量化

image-20210809170731986

image-20210809170731986

一开始只想到房租、售价等几个变量

开始叙事,通过”讲故事“一步步推衍:

从开张开始,需要品牌,装修,开工后要培训,设备,原料。。。。

最后进行数学运算。

有两种厉害的商业思维分析框架,后面会讲:

image-20210809171033121

image-20210809171033121

这件事其实非常简单,更何况我可是数学大佬。

OKR模型

image-20210809171243197

image-20210809171243197

竖直分解目标,水平量化目标,案例:

image-20210809171352398

image-20210809171352398

这也为行动力提高打下了坚实的基础!

清单思维

对应to do list 和 time schedule

非常简单,但极其有用

列出来有利于

  • 确定优先级
  • 让人专注,有利于“聚焦”。
  • 利于推敲,找到不严谨的地方
  • 节省脑资源!!(我就因为这个当年开始列清单的,记得难受死了

image-20210809191126647

image-20210809191126647

to do表和时间表就像一个事情的两个维度,一个以任务为核心一个以时间为核心,推荐飞书表

取舍

对大多数人来说,难度更多在 

一般最多选两样。

image-20210809191611562

image-20210809191611562

工程思维:便宜+快 (反完美主义,反本能的

艺术思维:好

三、系统论

可以用来分析公司?

工程思想是拆分的还原论,那么这里就是整体论

观点:如果不着眼于系统,只改变局部,最终可能总被系统拉回来,比如一个闭环系统👇

image-20210812003721985

image-20210812003721985

系统论相当于是呈现这些“飞轮”的机制,让我们从整体把握这个逻辑

系统

很多实体通过相互 联系 形成了一个有运作规律的整体

image-20210812005240164

image-20210812005240164

image-20210812005306703

image-20210812005306703

要素

+ 正信息 正能量 资产

– 负信息 负能量 负债 负信息是让世界变得更加混乱的信息,如谎言、谣言

关系

+ 加强 – 减弱

四种循环

正要素+正关系 = 良性循环

负要素+正关系 = 恶性循环

负要素+负关系 = 贤者时刻(纠错)

正要素+负关系 = 回归平庸(后两个都是均值回归)

滞后效应

负循环

因果分析法,找到生活中的负循环

利用杠杆解,主要矛盾

image-20210812010338719

image-20210812010338719

复杂的模型(混沌),如果能找到关键变量,便能牵一发动全身,彻底重构整个系统


建立仪式!

所谓仪式,一旦开始,剩下的步骤就不需要控制,利用惯性执行

这可以尽可能地减少我们大脑的意识消耗。


建立良性循环

image-20210812011007405

image-20210812011007405

我也要建立对自己的信任!

均值回归,人是难以突破社会的。。。我跳出了这个圈子,所以我认识的人还是有点少、、、

image-20210812011253657

image-20210812011253657

我大概会抛弃回报公平吧,回报什么的没啥意思。

草,滞后效应,我现在熬夜会搞得以后难受。。。。哎呀好气

价值投资!也是滞后效应,这就是“确定性啊”

储蓄池

image-20210812011807899

image-20210812011807899

保护自己的缓冲地带

一个人何以扛过滞后效应,凭借的是

image-20210812011901249

image-20210812011901249

有储蓄机制的系统,也是一个有非常大适应力的系统。

这也引出好系统的三大特性:

  1. 鲁棒性,可以建立模拟攻击(跳出舒适圈
  2. 自组织,不依靠外部指令,按照某种内在规则自动自发地形成有序结构的一种现象(人体)
  3. 层次性,子系统,递归,封装思想(刚才的仪式

四、函数

函数是这个世界上最美妙的事物之一。

image-20210812012642329

image-20210812012642329

对大部分人来说,二号区是最方便的,实用而且简单直观

教科书为了严谨才把定义搞得那么抽象。函数重要的能力是可视化

时间函数

高特纳曲线

image-20210813094417037

image-20210813094417037

不要高估短期能发生的变化

不要低估长期能发生的变化

这是由神经科学的人性曲线和物性曲线(逻辑斯蒂函数(sigmoid))叠加构成的。

image-20210813095148856

image-20210813095148856

而逻辑斯蒂增长就是由指数增长+环境阻力构成的那个物种曲线hhh

倒U曲线

image-20210813095346101

image-20210813095346101

可以用在生命机能等诸多现象中

正余弦函数——波动,周期

指数函数,跨过某个拐点,就开始起飞。

对数函数,玻璃顶的存在。

image-20210813101214895

image-20210813101214895

这只是个大概。

五、脑科学

又称神经科学,作为几乎所有研究人类行为的基础学科

image-20210813101722891

image-20210813101722891

image-20210813101844649

image-20210813101844649

爬行脑是很难主管调节的,比如褪黑素得用化学药物,是生存本能。

所谓的刻意练习,就是利用人类脑对哺乳脑的驯化过程

新皮质四大脑区:

额叶、顶叶、

额叶

最核心区域,智慧所在

image-20210813102929814

image-20210813102929814

分好几个区:

image-20210813103133065

image-20210813103133065

ps: 布洛卡区和威尔尼克区就是语言中枢。

前额叶皮质是非常关键的部分,掌管诸多功能,最重要的是 社交和自控、专注

image-20210813102334506

image-20210813102334506

实际上这个距离就是自控和延迟满足,但如今人们的自控能力发展较慢,取而代之的是高维信息处理能力变强,所以人们自控力要在30岁左右才达到巅峰

image-20210813103419281

image-20210813103419281

镜像神经元

负则模仿能力和社交能力,还有共情能力,还有音乐。

分布在前运动皮质和初级运动皮层。向下直接连着脑干、脊椎。

还分布在布洛卡区。所以语言和音乐学习的捷径就是浸泡在大环境里面模仿别人,而不是考试。。

顶叶

负则统筹和协调,空间想象力

image-20210813103936139

image-20210813103936139

颞叶:语言理解,面部识别,洞察力,观察细节。

image-20210813104113191

image-20210813104113191

枕叶:完全用于视觉


学习

发现人类大脑里处理视觉的区域特别多!可视化yyds

image-20210813104345656

image-20210813104345656

依次激发更多的脑区!!

image-20210813104325285

image-20210813104325285

单纯语言沟通效率是很低的。

哺乳脑

(女发达)边缘系统:长期记忆、情绪管理、嗅觉(跟这些有关,所以体香很重要)、性唤醒

(女尤其发达)扣带回区域:情感、焦虑、痛苦、自我调节、负面想象

杏仁核:恐惧、愤怒、兴奋、战或逃

image-20210813104933864

image-20210813104933864

因此恐惧会抑制人类脑,再聪明也得服从本能,战或逃取决于过去的经历和基因。

可以通过训练,用经验告诉杏仁核不必恐惧,选择战而不是逃。

(商家最爱)基底神经节:操作技巧、习惯养成、奖赏系统、上瘾系统

image-20210813105502624

image-20210813105502624

这个核是消费关键。

刻意练习

刻意选择,不断重复。

就像是不同脑区的神经元链接,多次重复刺激以后形成坚固的道路

但关键步骤要放慢速度,可能调度更多的脑区观察这个过程。

image-20210813110129493

image-20210813110129493

所以贴标签是不可取的。

六、复杂性科学

还原论或还原主义(英语:Reductionism,又译化约论),是一种哲学思想,认为复杂的系统、事物、现象可以将其化解为各部分之组合来加以理解和描述。

在哲学上,还原论是一种观念,它认为某一给定实体是由更为简单或更为基础的实体所构成的集合或组合;或认为这些实体的表述可依据更为基础的实体的表述来定义。” 还原论方法是经典科学方法的内核,将高层的、复杂的对象分解为较低层的、简单的对象来处理;世界的本质在于简单性。

复杂性科学兴起于20世纪80年代的复杂性科学,是系统科学发展的新阶段,也是当代科学发展的前沿领域之一。复杂性科学的发展,不仅引发了自然科学界的变革,而且也日益渗透到哲学、人文社会科学领域。复杂性科学为什么会赢得如此盛誉,并带给科学研究如此巨大的变革呢?主要是因为复杂性科学在研究方法论上的突破和创新。在某种意义上,甚至可以说复杂性科学带来的首先是一场方法论或者思维方式的变革。

  1. 它只能通过研究方法来界定,其度量标尺和框架是非还原的研究方法论
  2. 它不是一门具体的学科,而是分散在许多学科中,是学科互涉的
  3. 它力图打破传统学科之间互不来往的界限,寻找各学科之间的相互联系、相互合作的统一机制
  4. 它力图打破从牛顿力学以来一直统治和主宰世界的线性理论,抛弃还原论适用于所用学科的梦想
  5. 它要创立新的理论框架体系或范式,应用新的思维模式来理解自然界带给我们的问题

复杂性科学是指以复杂性系统为研究对象,以超越还原论为方法论特征,以揭示和解释复杂系统运行规律为主要任务,以提高人们认识世界、探究世界和改造世界的能力为主要目的的一种“学科互涉”(inter—disciplinary)的新兴科学研究形态。

某学者定义:运用跨学科方法,研究不同复杂系统中的涌现行为和统一性规律

《复杂》 入门必读

《规模》 研究增长

《系统论》 系统论入门


复杂系统

image-20210815174046214

image-20210815174046214
  1. 大量个体聚集
  2. 个体间的运作相对简单,但是叠加后产生群体的复杂行为
  3. 能通过不断进化,对环境产生适应性

关键词:聚集,进化,适应性,涌现

image-20210815174524772

image-20210815174524772

image-20210815174958056

image-20210815174958056

这样简单的三条原则不断循环后,就能发挥超凡的作用。

这就是单体简单->群体智慧。

image-20210815190757944

image-20210815190757944

*聚焦

四段论:

  1. 清理念头整理、列出思绪,保证自己没有牵挂心无旁骛
  2. 忘我聚焦进入超高效状态持续2个小时,完成大部分任务
  3. 刻意休息只能玩,强迫自己玩,比如半个小时
  4. 惯性工作接着大体完成的脉络继续,由于之前的基础,可以低能耗的工作。

迭代

这里讲的是工程学里的迭代,尤其是软件开发里的敏捷开发。

找到自己的最小内核,一层一层递归、累加、迭代,最终涌现成为传奇

image-20210815192540335

image-20210815192540335

在3.0才找到拐点,我们要抱着正确的心理预期,不是每一次迭代都能升级。

精益创业

image-20210815192654391

image-20210815192654391

适应性

image-20210815192932647

image-20210815192932647

过犹不及。。彻底失败

七、认知心理学

认知心理学(cognitive psychology),20 世纪 50 年代中期在西方兴起的一种心理学思潮和研究方向。广义指研究人类的高级心理过程,主要是认识过程,如注意、知觉、表象、记忆、创造性、问题解决、言语和思维等。狭义相当于当代的信息加工心理学。即采用信息加工观点研究认知过程。


 文章作者: Darren
 版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Darren !

程序员必读的十篇文章

作为一个Java程序员和软件开发者,我从许多『关于某某每个程序员必知』这类文章中学到了很多东西,它们会就一个特定的话题给出很多有用有深度而且难以被发现的信息。我在求知的过程中遇到过一些很有用的文章,并将它们存为书签用于日后参考和重复阅读。

个人认为所有程序员都能从中受益,这也是我写这篇文章和跟大家分享所有这些文章的原因。这些都是从我个人书签里挑出来的。你将在本文中看到每个程序员都应该知道的经典话题,诸如内存、Unicode、浮点运算、网络、面对对象设计、时间、URL编码、字符串等等。因为初学者和新手的实际经验匮乏,所以本清单对他们来说非常重要。由于大部分文章其实是从实践中来的,所以初学者和中间件编程者可以从中获得很多知识。同时在职业生涯早期获得基础知识也有助于避免犯错,这些错误其他程序员和软件开发者在他们学习过程中都已经解决过了。

尽管仅仅通过一次阅读并没那么容易就汲取这些文章中给出的知识。你可能并不能理解浮点数的一些细节,或者被内存那些微妙的细节搞得头很大,但是手头留有这些文章列表并时不时联系上下文用作参考还是非常重要的。所以祝你们好运并希望你们可以享受阅读的乐趣。同时,请记得分享其他不在这个列表中的《关于某某,每个程序员必知》的文章。

关于内存,每个程序员必知

这是一篇很经典的文章,它展示了关于内存的方方面面,老的、新的、已知的、未知的。尽管内存问题相当普遍无处不在,也并不是每个程序员都足够了解它。如果你正在写高性能应用,关于现代系统中内存的知识尤显重要。硬件设计者会遇到更多复杂的内存处理和加速技术,比如CPU缓存,但是这些在没有程序员帮助的情况下并不能得到最优性能。我还在阅读这篇文章,我也无法告诉你从中我学到了多少关于诸如RAM、CPU缓存之类的知识。L1缓存和L2缓存、不同类型的内存、DMA、内存控制器涉及和通用内存。简而言之,这是一篇所有经验层次程序员都必读的文章。

关于浮点运算的每个计算机科学家必知

浮点运算是一个很微妙的东西,且并不容易掌控。甚至很多Java程序员都不知道当使用==运算符来做float或double类型的数值比较时会出什么错。我们中的很多人在用float和double类型做货币运算时都经常搞错。本文是此类文章中另一篇佳作,也是所有软件开发者和程序员必读文章。随着经验增长,你期望了解普通问题的细节,而浮点运算就是这些细节中的一个。作为一个高级Java程序员,你必须知道怎么用float、double或是BigDecimal类做货币运算,怎么对浮点数取整,等等。即使你知道浮点运算的基础,通过阅读本文你也会学到一些新的东西。

关于Unicode的每个开发者必知

字符编码是另一个让很多程序员纠结的领域,《每个软件开发者绝对必须要无理由知道的关于Unicode和字符集的最基本常识》一文旨在填补这个领域知识的空白。附注一下,没错,这就是这篇文章完整的标题。它的作者是statckoverflow.com的创建者之一————Joel Spolsky。Joel差不多在十年前就发表了这篇博文,而今看来它仍然适用于当前情况。本文将告诉你什么是Unicode,什么是字符编码,字符是如何用字节表示的,以及其他许多许多。这篇文章最赞的部分是它的表达方式(语言和流畅性),即使你对Unicode一无所知,你也可以无障碍阅读。总之,这是一篇对所有程序员、编程者和软件工程师而言更重要的必读文章。

关于时间,每个程序员都应了解的》(伯乐在线 2013年1月翻译)

在字符编码以外,时间和日期又是另一个让包括我自己在内的很多程序员纠结的领域。即使是高级开发者都会被GMT、UTC和夏令时,以及闰秒搞晕。坦白说,很难做到在处理时区问题时完全不犯错误,处理夏令时差以及它带来的影响同样也不容易。如果你用试错的方法时问题会更糟,因为这个办法永远无法帮你解决这个问题。有多少可能出错的地方,就有多少会发生误解的事。不管日期是否包含时区可以像地狱般把你搞混,将UNIX时间转化为其他时区会让你崩溃,从而忘记时钟同步和延时。我希望通过阅读这篇经典的文章可以消除你们对于时间的很多误解,可以打好关于时间的基础。

关于 URL 编码,每个开发者必须知道的

本文描述了一些大家对于URL编码的一般误解,在给出常见的问题及其解决方案前,先讲了HTTP的url编码。虽然本文并非针对某一具体的编程语言,它还是以Java来说明问题,并解释了如何在不同层次的Java web应用中解决URL编码的问题。你回学到URL语法基础,HTTP以及其他协议的通用URL语法。本文还阐述了URL的常见陷阱,比如字符编码、URL不同部分中的保留字符,以及URL编解码问题。如果你是一个Java程序员,你也将学会如何在Java应用中正确处理URL,如何构造URL和使用Apache CommonsHTTP客户端库。最后它还给出了最好的练习和处理URL的建议,比如应该在建URL的时候对URL编码,保证URL重写滤波器可以正确处理URL,以及其他很多很多。总之,这事一篇任何web开发者和程序员必读的文章。

关于Web开发的每个程序员必知

程序员和软件开发者必读文章。本文来自 stack exchange,是一篇每个程序员在发布站点前关于web应用需要学会的技术细节的文章。文章涉及接口设计、用户体验、安全、web标准、性能、搜索引擎优化、相关技术,还包含了一些重要资源。由于当今世界强烈依赖于互联网,程序员有个人网站和博客的现象很普遍,本文提供的经验不仅仅只对你的职业有帮助,也有助于你的私人工作。你将学到所有关键的技术,比如HTTP、HTML、XML、CSS、JavaScript、浏览器兼容性、降低网站载入时间的tips、XML地图、W3C规范和一些其他的关键细节。

关于SEO的每个程序员必知

这是另一篇对web开发者、程序员和博主来说非常重要的文章。SEO如此重要无法被忽视,因为很多程序员同时也是博客撰写者,所以学些搜索引擎优化基础来让Google搜到他们的文章并将文章展示给其他程序员很重要。在当今这个内联的世界,每个公司都必须将自己展示在网上才得以幸存,由此看来,SEO显得极其重要。如果你开办一个公司并开始销售商品,那么SEO就是你需要关心的东西。所有程序员,尤其是web开发者,都能从本文中受益良多。记住,搜索引擎优化是一个涉猎很广且变化迅速的课题,而且针对不同的搜索引擎差异很大,比如Google、Yahoo以及其他搜索引擎。所以为了掌握这门技术你将需要经常学习新知识。

关于未定义行为的每个C程序员需知

C语言有一个“未定义行为”的概念。未定义行为是一个有很多细微差别的很广泛的课题,这也是我喜欢Java语言的其中一个原因,Java的未定义行为少得多,混淆也很少,而且更加稳定和太平。C中很多看上去很合理的东西都有未定义行为,这也是程序里出bug的常见原因。此外,C中的任一未定义行为都允许实现方式(编译器和运行)来生成运行得很痛苦的代码,做一些完全不期望其发生的事,甚至更糟。这篇精彩的文章将带你在未定义行为的海洋中遨游。

关于网络,每个程序员需知

文中写道:“你是一个程序员,你是否曾想知道多人游戏是怎么运行的?这看起来似乎很神奇:两个以上的玩家通过网络分享同一段经历就像是在同一个虚拟世界里真正在一起一样。但是作为程序员,我们知道事实上发生的和看到的完全不一样。所有一切都是错觉。”

这是一篇关于网络的趣文,目标读者是游戏开发者,但我认为每个程序员和开发者都能从中受益。

关于String,每个Java开发者需知

这是我写的一篇关于java.lang.String的文章,我个人认为是每个Java程序员都需要了解的东西。String在每日的Java编程中很重要,所以任何Java开发者都必须了解这些。本文涉及了String的很多重要领域,包括string pool、string literal、用==和equals()比较String的区别、将字节转换为String、为什么String是不可变的、正确拼接String,等等。高级程序员可能已经知道所有这些情况,但是即使这样复习一下这些也是好的。

程序员都应该了解哪些安全知识》伯乐在线 2012年3月翻译

这个问题是StackOverFlow上的一个电脑编程的学生问的。就像我们学了很多常见的编程概念(比如操作系统、算法、数据结构、计算机架构等)一样,学一下安全相关的知识也很重要。虽然安全是一个很大的课题,它涉及加密/解密、SSL、网络安全、模糊处理、身份验证、证书授权等等,一些最基本的常识对每个程序员而言都是必需的。刚开始工作的时候,我个人对安全知之甚少,当开始写基于Java web应用的Servlet/JSP的时候,才开始了解网络安全和一些类似SQL注入、拒绝服务、XML注入、跨站脚本攻击等的安全威胁。作为一个Java开发者,现在我开始跟一些fortify、PMP和其他静态代码分析工具提供的安全Java编程经验。本文是非常好的安全主题集和链接集,不管你是否在编程,你肯定可以从中受益。

每个程序员都应知的延迟数字

这是一篇额外奖励的文章,但也是每个程序员必读之文。无论用哪种编程语言,如Java或C++,为了写出高性能的应用程序,你都应该了解基本的耗时数问题,比如,从内存、L1缓存、L2缓存、SSD随机读、硬盘中读取变量分别需要耗费多少时长。对互斥锁加解锁需要花多长时间,城市间传输一个数据包或是同一个数据中心循环传输一次需要花多长时间。这些耗时数与编程语言无关,属于内核知识的一部分,开发者必须写出高性能低耗时的应用。这篇文章好在它还提供了这些耗时数在多年来演变的对比分析。你可以看到这些耗时数在2006年和今天分别是什么样子的。

后话

以上是所有每个程序员必读文章清单。坦白说,程序员要学的东西太多了,学习一门编程语言,如Java,仅仅是冰山一角,但我们不都对学习充满热情的吗?编程是一项很有挑战的工作,在你的整个职业生涯中唯一能帮到你的就是基础知识,如内存、Unicode、浮点数、时间、安全相关对任何程序员都很重要。很少有什么是与特定的编程语言相关的,比如我那篇关于Java String和关于未定义行为每个C程序员需要些什么的文章,但对于初学者和开发者而言仍然是很好的学习材料。

from:http://blog.jobbole.com/71723/

Code Review CheckList

在关于高效代码审查的博客中,我们推荐使用清单(checklist)。清单是代码审查中的伟大工具——他们确保审查在团队里持续高效。它们也是确保常见问题被识别、解决的方便途径。

软件工程协会的研究表明,程序员常犯的错误有 15-20 种。因此把这种错误增加到清单里,你就能确保在它们出现时指出来,帮助消除这种隐患。

为了让你开始建立清单,下面是经典的条目列表:

代码审查清单

总体

  • 代码能运行吗?代码实现了想要实现的功能了吗,逻辑是正确的吗,等等。
  • 所有代码都很容易理解吗?
  • 它遵循了你们都同意的代码规范吗?规范通常包括花括号的位置、变量和函数的命名、行长度、缩进、格式和注释。
  • 有多余的或重复的代码?
  • 代码尽可能模块化了?
  • 全局变量能被替换?
  • 有任何被注释掉的代码?
  • 循环结构里有固定的长度值和正确的结束条件?
  • 有代码可以被类库函数取代?
  • 日志和调试代码可以被移除?

安全

  • 所有数据输入都被校验(为了正确的类型、长度、格式和范围)和转码了?
  • 第三方工具集在哪里用到了,能够返回被捕捉到的错误吗?
  • 输出值经过校验和转码了?
  • 不合法的参数值得到处理了?

文档

  • 有文档吗,文档描述了代码意图吗?
  • 所有的函数都加注释了?
  • 任何不寻常的行为和边界处理都做说明了?
  • 就第三方类库的使用和功能写文档了?
  • 所有的数据结构和测试单元都做解释了?
  • 有不完整的代码?如果有,它应该被移除还是打上’TODO‘之类的适当标记?

测试

  • 代码可测试吗?比如,不要增加太多的或隐藏的依赖,不能够实例化对象,测试框架能够使用方法等。
  • 有测试吗,它们全面吗?比如,至少包含了你们认可的代码覆盖率吗?
  • 单元测试实际地测试了代码正在实现的目标功能了?
  • 数组检查’越界‘错误了?
  • 测试代码可被已有 API 的应用取代吗?

你还可以为清单增加一些语言相关的问题。

该清单故意没有包含所有的问题,你并不想一个长长的清单,以致于没人去使用。只需覆盖常见问题即可。

优化你的清单

把该清单做为一个起点,你应该针对具体用例进行优化。有个不错的办法,那就是让你的团队在代码审核时,花一点时间提出所产生的问题。有了这些数据,你就能够甄别出团队的常见错误,然后就被改造成常见清单。要确保删除那些不会发生的条目(你或许希望保持较少地发生,还有诸如安全相关的重要条目)。

集思广益,及时更新

做为通用法则,清单上的条目应该是具体的,如果有可能,你可以就此做一份二元决策【注1】。这有助于避免判断上的矛盾,与团队分享清单,并得到他们对于内容的认同也是不错的主意。确保定期审查清单,检查每一项以确保仍然相关。

有了优秀的清单武装,你就可以增加代码审核中的瑕疵数量。这有助于你提升代码质量、避免不稳定的代码审核质量。

为了更多地了解 Fog Creek 上的代码审核,请观看下面的视频:http://fast.wistia.net/embed/iframe/vigy79tuhq

from:http://www.techug.com/increase-defect-detection-with-our-code-review-checklist-example

 

做程序员你需要明白这九件事

(本文为 Medium 驻站作家 Manual Elbert 撰写,以下以第一人称叙述)

三年前我在巴塞隆纳的神经科学实验室工作,忙着把电极贴到人身上、教认知系统的课,而现在我靠着设计、编写软件维生。

当然从前我在研究科学时就写过很多软件。如果你想要看懂 40G 的脑部扫描资料,你必须捲起袖子写些语法来处理这些数据,而我一直都是个很好的程序编写者。但直到我辞去了我的学术工作(可能也告别了我的学术生涯)并开始在一个小而有野心的新创公司工作之后,我才真正知道什么是软件工程师,以及在这一行是怎么回事,并不是知道更多程序语法、资料库、演算法跟设计模型就好。

如果我在读研究所之前就知道这些事情就好了,将会让我的工作生涯变得更轻松。这是一些对年轻的我的忠告,是我过去三年所学到的经验,不得不说,有些实在不是那么美好。

  • 1. 不要高估天赋的价值

年轻的时候,如果你很聪明,你便可以遥遥领先其他人,如同小池塘里的一只大鱼。如果你那半调子的口才很好的话,那么聪明的功效还能加倍。事实上,聪明加上口才好能够让你不用念什么书就顺利度过高中跟大部份的大学课程。(不过你还是得念物理,你总不能说服一个等式转弯)。

恭喜你,你很幸运,同时却也十分不幸运。因为当你毫无阻碍的就冲过了求学的终点线,对待学习如反掌折枝。在这同时别人必须去学习勤劳、坚持、人际网路这些之后远远比学识更加重要的东西。

我们的社会太过重视聪明才智了。当我跟人们提到我以前专攻神经科学,大家都会说:「哇,你一定很聪明」。的确我不是笨蛋,但我知道很多人也许不如我这么聪明,却是远比我好的神经科学家。

聪明才智当然还是能帮你打开一扇门,但绝不会帮你做好工作。勤劳、严谨、可靠的人际关系都是不只软件工程师,而是你跨出研究所的美好泡泡之后要成为任何专家都必须拥有的特质。

  • 2. 要对你的专业感到骄傲、乐在其中

这句话可能有点老梗,但对年轻的你来说仍然很重要:无论你做的是什么,都以它为傲,没有任何事情应该只被视为达成目的的手段。

不论对象是人或是试管,你都必须严谨分析你的资料并使你的统计数据有效,然后再重来一遍,因为有时候你会发现你犯了哪些愚蠢错误。如果你无法乐在其中,仅把这些步骤视为出版论文或发行产品的必须过程,那么你永远无法真正擅长这件事。

如果你是写软件的,这代表你要规画你的特色、研究现有的开源代码、学习新的模型与程序语言、修復你的错误、重建程序码并且维护它。如果你没有想要精通你工作的野心,那无论你是科学家、工程是或是任何你在做的工作,可能都只是浪费时间。

你可以拥有一些「宠物计画」,一些小小的、有点蠢的、并不一定能满足你的即时目标、你只是因为「享受」在做这件事情。有趣的是,这在软件社群里似乎很常见:许多我们现今正在使用的产品大部分都来自某人的宠物计画,而几乎不是来自科学圈。我最喜欢的名言之一是来自奥地利动物学家 Konrad Lorenz:

「对一个研究科学家来说,每天早上吃早餐前都抛弃一个宠物假设是好的晨间运动。」

如果你觉得这听起来很蠢,也许你不该当一个研究科学家。

  • 3. 学习新工具/新技术

作为上一点的延伸:投注时间学习新工具。不只是拓展你的抽象知识,而是实际去学那些能帮助你完成事情的工具。这很快就能见效。

一个学习新工具的好方法是上述的「宠物计画」。每次你要建造新东西时,也用新的方法建造它。记住,宠物计画就是拿来失败用的,你投资不多、你学到一点东西;如果计画不成功,或是你失去兴趣、或是你发现实在有点太难了,你不会有损失,不会伤到自己。

如果你从事学术工作,以下是我强力推荐的好东西:

(1) Git 跟 Github

Git 帮助你管理你的工作,再也不用担心备份问题;而 Github 上有一堆很好用的程序码,你不需要自己重造轮子。噢,请记得跟你的同伴再确认一次你的程序码。绝对不要用程序码来分析那些只有你看过的资料。(我不敢相信我得告诉你这件事情啊,年轻的自己。你一直以来都是一个好的程序编写者,但我仍然做了那些可能会被忽视的错误。如果不是有再检查一遍,我不会发现因为程序错误,有百分之三十的科学结果可能是假的。)

(2) 一个绘图软件

我通常都用 Inkscape,但标准的 Adobe Illustrator 跟新的 Sketch其实也一样好。用这些绘图软件来先处理你的图表和计画,这通常都比你在 Matlab 或是 matplotlib 上写绘图指令来得容易。

(3) 学习如何有效的利用你的文字与代码编辑器

Sublime Text 是个比 VIM 或 Emacs 来得容易学会的编辑器。知道捷径能够帮你省下一堆时间。

(4) 学习如何说话

看看 TED 上的演讲并注意这些讲者如何在十五分钟内就抓住观众,同时说出那些吸引人的故事。你可以在镜子前面练习,你的肢体与声音都是工具。

(5) 知道基本的 Python、R、HTML 跟 Javascript

这些工具可以帮上不少忙。如果你对写程序并非一窍不通,那学个新的面向编程或资料库。玩玩计算机视觉、自然语法编写、网页撷取、音乐合成跟机器人!

你所能看见解决问题的方法,永远都会被你所使用的工具所限。学习新工具代表你用新的角度看问题。如果你是大学生,我强力建议你一周之间拨出一天来学习新工具。如果你开始做硕博士研究,那就拨两天出来。长期来看,你会省下很多时间,而人们会被你的效率所惊艷。如果你觉得这听起来太困难、你没有时间、其他压力太大,那就跟你的老朋友谈谈,看看到底什么才是值得你花时间去做的。

  • 4. 成为真正的局内人

正常来说,你的长官或 CEO 会做出对机构或公司最有利益的事情,毕竟那是他的职责。

当我们说到「公司的最大利益」,其实我们是说某些局内人的最大利益。真正的问题是,你的长官或 CEO 到底把谁当局内人?这些利益共享者的利益又有多重要?

如果你的老闆认为他自己是唯一的获利者(越出名越好、越快获利越好),你最好快点逃走,逃得越快越好,不然你会被当成牺牲品。那谁才有资格利益共享?你的投资者或贊助者?员工?学生?人类?重点是:快点找出来。如果你不被当成受益者之一,那就快走。无论你有多爱你的工作,那都只是一厢情愿、被滥用的关系。

  • 5. 学会展现成果

「Shipping it」变成科技界一个相当流行的词汇,意即把你的产品从仓库拿出来给客人。但除了字面上的意思,它其实还有一种精神层面的意涵:你的东西要到了客人手上才会有价值,而这应该是你一直以来的目标。

在学术范畴中,我写的大部分软件都只会在一个系统上执行一次。为了产品而写的程序则是完全不一样的东西,这会让五十万人使用,而当写程序成为我的专业时,我发现我并不擅长这件事。

但这同时也代表琢磨好几年,直到完美产品诞生是没有意义的。你只要做出一点成果,就把它送出去,写一份最简单的报告你就有可能被录取。晚点再担心更复杂的学问吧,先搞定基础,尽快发表它。Just ship it。

  • 6. 懂得 80/20 守则

80/20 守则基本上是说,达成你预期目标的 80% 需要花你整个企画 20% 的时间,而剩下的 80% 时间就是拿来搞定剩下的 20% 目标。这就像你从郊区开车进城市,你用两成的时间开了八成的距离,但只要你遇到塞车,最后的两成距离会花你超久的时间。

这重要在哪?因为人们总是低估计画所需的时间,科学家跟工程师尤其常这样。这部分要归因于经验:你知道得越多,你越能预测之后有什么会出错、以及有什么是人们一开始不会注意到的有趣东西。

如果你还没有这些经验,只要把你预期所需的时间乘以五倍,并且预想五倍时间过后你就能达到「快成功了」的阶段

  • 7. 你没出卖你的灵魂

我念博士全都是因为一些错误的原因,其中一个我现在称之为「学术之罪」。我相信如果我没有追求博士,我就是浪费了我的天份,我觉得我亏欠所以在求学过程中给我帮助的人:教授们、帮我出奖学金的人等等。但我并没有,他们也许投资了我的学术未来,也或许对他们的投资没有兑现、没制造出一个伟大科学家而感到失望,但那是他们的问题,不是我的问题。

这跟做工作是一样的道理。人们总是会投资你,但那常常是因为这对他们最有利,而不代表他们买走了你的灵魂。

  • 8. 脱离你的舒适圈

以下是我如何看待这个世界的:

1-nUYG9kYTLBMxde_YNAw6hw

如果身边一切看起来很熟悉,代表你能学的东西极少。但如果你现在处于非常惊慌的状态,你可能什么都没学到。

在舒适圈内,你熟知圈子里的每个人、那里是你的归属,你知道如何应付问题,太阳底下没有新鲜事。如果你想学些新知并成长,你必须离开你的舒适圈,那才是学习的开始、有趣的事情发生的地方。那是一个你无法对每件事立即反应过来的地方。

当然也有某些时刻你会被压垮,那就是惊恐圈,你在那里昏倒、你所能做的只有勉强维生,并期待某人快来救你。

最棒的地方就正在你的惊恐圈正前面,那里才有挑战、你会在那里学到最多、改变最多。想办法去到那里吧。

「忘记安全。在你所畏惧之处住下。摧毁你的名声。变得恶名昭彰。」-鲁米,伊斯兰神祕主义诗人

  • 9. 学会驯服你的躁动

舒适坐好、闭上眼睛并正常唿吸。专注在你吐出的空气,通过你的鼻腔抚过你的上唇,没别的,就专心做这件事。

你刚刚专心了多久?五分钟?恐怕不到。

一分钟?很好。

比二十秒更少?恭喜你,你是正常人。你的脑袋就像猴子一样,会抓住最近的树枝。在学术上我会换句话说 …… 说好听一点是「联想思考」。如果你想要有创意,联想思考是很好的事情,但它却是专注力的杀手。

好消息是,你能学会如何专注。外面有一卡车的「提升生产力的技巧」,但他们都只抓到皮毛,你不会想要一个分心自由写作的软件,你想要永远抚平你猴子般跳来跳去的思绪。

对我有效的跟对你有效的可能完全不同。对我来说,定期静坐冥想非常有效(同时有其他许多优点与副作用),但就算是冥想静坐也有很多种不同的形态与传统,而我不可能找到一个对大家来说都适用的。我所建议的,是让你的意识保持一定的型态,并且很认真的对待它。你认为静坐是浪费时间吗?你会去健身房健身,但你应该要两倍的时间在脑力运动上。

只有好好地集中精神,你才能一步一步完成所有的目标。

from:http://www.techug.com/9-things-i-learned-as-a-software-engineer