0%

Random-Thoughts

有的有幸游到了岸边,有的不幸迷失在水里

而有的选择沉了下去,永远消失在这片海里

1
date: 2019-02-01

在工作需要的时候,程序员的学习能力是惊人的,所以根本没必要“保护” 程序员远离新语法。只要有文档,有时间,他们自然能学会。

自己将检查工具做得更聪明。

过早优化是一切罪恶之源,让代码先跑起来再说,正确性比性能重要

概率论,离散数学

统计

代数和线性代数

数理逻辑

信息论和柯氏复杂性

广度优先才是学习数学的正确方法,深度优先是不行的,先打开眼界,了解各种名称,搞清楚什么是什么

学习数学忘记那些算法和证明,去了解那些技术的方方面面:名称,作用,大概是怎么计算的,历史有多悠久。是谁发明的,局限性在哪里,互相之间的关联是什么,数学里的素质教育。

第一步界定问题,最花时间的,当一个问题在手却不知道如何下手的时候。但看出这是一个微分问题,或是凸优化问题,亦或是布尔逻辑问题的话,至少立刻知道从哪着手寻找答案

链式法则就是对“串在一起”的函数求导,在学会求导和积分之前,应该先去学怎么计数和编程。

学习数学的最佳方式是每天花上15~30分钟浏览下维基百科。有各种关于数学分支的文章,数量多达好几千。读去吧,遇到任何不懂得东西,只要点一下链接跳过去读就可以了。一直读,读到觉得乏了累了。大开眼界,摸出一些门道,每一种数学分支都会涉及一个对应复杂多元版本的单变量,而多元版本几乎一定是用矩阵或者一次方程来表示的,至少在应用数学里都是如此,所以线性代数的重要性就会慢慢上升,不弄懂它到底是怎么回事就是不行的时候,自然就会跑去下载教程或者去买本书来读,皆大欢喜。

所谓的数学就是将人们在某些领域里的“常识”形式化数学研究之所以那么迷人就是因为它唯一的极限就是数学本身;形式化模型本身固有的能力、证明、公理系统、以及法则、信息、计算的表示

浏览数学完全不同,尝试去了解人们到底努力解决什么问题,从那堆符号里看出端倪来,他们也不会像天书一样。只是一个循环罢了,一个把值累加,另一个将他们相乘,积分也不过是连续区间的曲线的和而已,习惯以后就不怎么可怕了

原来如此,当数学不可怕时,只要掏出计算器就行了,计算器可以很炫,几乎所有实用的数学在很大程度上都挺容易接受的

1
date: 2019-02-10

每天学一点数学,实在是太棒了!

编译原理是一门重要的课程,将之前学过的几乎所有东西都捏合再一起

这个世界上除了PC

还有FC、SFC、MD、PS、N64、NGC、SS、DC、PS2、PSP、GBA、GBASP、NDS、3DS、PS3、PSvita、XBOX、XBOX360、PS4、Wii、NS、XBOXone、PS5、XSX等等

这个世界上除了马化腾

还有William Higginbotham、宫崎英高、小岛秀夫、三上真司、阪口博信、宫本茂、神谷英树、上田文人、Will Wright、Sid Meier、Alexey Pajitnov、John D. Carmack、Gabe Newell等

这个世界上除了腾讯等不生产游戏的搬运商以外

还有Clover Studio、Blizzard Entertainment、Electronic Arts、NEXON、Nintendo、Rockstar、Ubisoft、KONAMI、CAPCOM、Naughty Dog、SCE Santa Monica Studio、SEGA、SNK、Valve、KOEI、CDPR、Paradox Interactive、Namco、BANDAI、BANDAINAMCO、Square、 Enix、Square Enix等(不是重复写,因为是游戏史上著名的合并)

这个世界上除了DNF、cf、LOL以外

还有The Last of Us、Chrono Trigger、Grand Theft Auto、Dark Souls、Super Mario Bros、Monster Hunter、Halo、Castlevania、The Legend of Zelda、Valkyrie Profile、God of war、Final Fantasy、Civilization、The Witcher、Call of Duty、Bloodborne等

1
date: 2019-02-20

坐在计算机前编程,不耐心一步步写出整个程序,确保大体正确,而不是一股脑不管对错,先把代码堆上去,再慢慢修改。书上说,调试是最后步骤。可是这种工作方法看上去却像编程就是在调试,对对对英雄所见略同,把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家,画家和建筑师的做法完全一样。编程语言首要特性应该是允许动态扩展,编程语言是用来帮助思考程序的,而不是来表达你已经想好的程序,应该是一支铅笔,而不是钢笔 创作者不同于科学家,这是巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。原来如此,一类人,作家和画家没有对数学家的妒忌,大学和实验室不允许黑客做他们想做的事情,适合黑客的地方可能就是企业,程序员被当作技工,职责就是将产品经理的”构想“翻译成代码。肉食者鄙,排斥差异的时候,将失败的可能性排除在外,也将获得高利润的可能性排除在外,生产特别优秀的产品不是他们的获胜手段,大公司只要做到不太烂,就能赢,竞争优势是在软件设计方面,不过机会不容易找到。原来如此,怎么才能做自己喜欢的事情?这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的白天工作day job 从音乐家身上来的,你有一份为了赚钱的工作,还有一份为了爱好的工作。

开源软件的这种工程模式就是正确的模式,因为已经被其他领域的创作者都验证过了, 面试程序员,主要关注的事情就是业余时间他们写了什么软件,如果你不爱一件事,不可能把它做得真正优秀,要是你很热爱编程就不可避免地会开发你自己的项目

摄影技术消灭了画家的白天工作,微软垃圾的原因啊不鼓励雇员为开源项目做贡献,甚至业余时间也不行,如何学习编程,画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此,他们从实践中学习,13岁就自己动手写程序了,即使上了大学,黑客学习编程依然主要通过自己写程序。画家的作品都会保留下来,每幅画所用的技巧,都是建立在上一幅作品学到的东西之上。谋福作品如果有特别出色之处,往往能够在更早的作品上发现一个小规模的初期版本。大多数创作者都是这样学习和工作的,作家和建筑师似乎都如此,对于黑客来说,采取像画家这样的做法很有好处,定期地从头开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版地形式包括进去。黑客通过实践学习编程说明黑客与科学家区别有多大,科学家就不会通过干活来学习科学,而是通过做实验和解题来学习,科学家研究地基础都是现有的很完美地成果,在这个意义上,他们第一步只是在复制别人已经做过的工作,最后他们才会从某一个点开始,进行自己地原创性工作,但是,黑客就不一样,从一开始就是原创性工作,根本没有他人完美地成果可以依靠,出发点原创,最终得到一个优美地结果;而科学家地出发点是别人优美地结果,最终得到原创性。

黑客不能盼望先有一个完美地规格设计,然后再动手编程,这样想是不现实的,学习绘画的创作过程,周期性心理考虑在内,在我厌倦的时候再去做那些比较容易地工作,这是个不错的主意。修bug可以留到以后解决,这个时候编程才变得直接和机械,接近社会大众想象中的编程的样子,消灭bug过程就像解数学题,已知许多约束条件,根据条件对方程求解就可以了。,哪里出错了?知道最后肯定能解决这个问题,如何与他人一起工作,多人共同开发一个软件的正确模式,需要合作,但不要合作过头,一个代码由三四个人共同开发,就没有人真正拥有这块代码,最终变得像一个公用杂物间,又脏又乱,到出堆满冗余代码,正确方法项目分割严格定义的模块,每一个模块由一个人明确负责,模块与模块接口精心设计,如果可能最好把文档说明写的像模块编程语言规范那样清晰。

绘画作品为人类用户准备,所以需要考虑到用户的人性需要。才能做出伟大的产品,必须能够站在用户的角度思考问题,学会“换位思考”。 从他人的角度思考问题正是成功的奥秘所在,“换位思考”并不就意味着你要做自我牺牲。完全是不同的两码事,了解别人对于事情的看法,知己知彼,百战不殆。大多数创作者都是为人类用户而创作,为了吸引用户,必须理解用户需要什么,几乎所有最伟大的绘画作品都是画人的,因为人类总是对自身感兴趣的。

怎样向技术背景的人解释技术问题,我们大概都认识这样一些人,他们在其他方面非常聪明,但是把问题解释清楚的能力却惊人低下。 软件的部分功能就是解释自身,为了写出优秀软件,必须假定用户对你的软件基本一无所知,要明白,用户第一次使用你的软件的时候,不会预先做好功课,没有任何准备就开始用了,所以软件的使用方式最好能符合用户的直觉,别指望用户去读使用手册。在这方面,最佳系统是原始电脑,文本编辑器和编译器不在此列,这些软件的典型用户是自己。

程序写出来是给别人看的,附带能在机器上运行。许多黑客六个月后再读自己的程序。却发现根本看不懂它是怎么运行的

1
date: 2019-02-28

好的设计

  • 好设计是简单的设计

  • 好设计是永不过时的设计

  • 好设计是解决主要问题的设计

  • 好设计是启发性的设计 简·奥斯汀作品几乎不带有任何描述,不告诉读者每件东西看上去是什么样子,只是把故事讲得非常生动,让读者自己把一切都想象出来同样绘画作品也分为描述性绘画和启发性绘画,后者往往比前者更引人入胜,每个人看到《蒙娜丽莎》都有自己的理解。

一个作品应该允许你按照自己的愿望来使用。想怎么布置就可以怎么布置,过上自己想过的家庭生活,而不是使得你像执行程序一样只能过上建筑师为你安排的生活。

软件上,你应该为用户提供一些基本模块,使得他们可以随心所欲自由组合,

  • 好设计通常是有点趣味性的设计 幽默的力量强大的标志轻松面对自己的人生,充满自信的人常常像燕子一样。

好设计并非一定要有趣,但是很难想象完全无趣的设计会是好的设计

  • 好设计是艰苦的设计 功能应当决定形式

  • 好设计是看似容易的设计 完美再现

联系是为了下意识反应,面对难题他能释放你的直觉

  • 好设计是对称的设计 重复性对称和递归性对称

对称的危险在于它可以用来取代思考,在大量使用重复的时候这种危险性更大。

  • 好设计是模仿大自然的设计 我的眼睛看着某样东西,手就代表你的思想,

  • 好设计是一种再设计 培养对自己的不满,犯错误是正常的事情,不要把犯错误看成灾难,要勇于承认,勇于改正

  • 好设计是能够复制的设计 把事情做对对比原创更重要。

不知不觉地模仿几乎必然将导致坏设计,如果你不知道自己的想法从何而来,可能就是在模仿另一个模仿者,等到你逐渐对一件事情产生热情的时候,就不会满足于模仿了,品味就进入了第二阶段,开始自觉地进行原创,最伟大的大师最终会达到一种超脱自我的境界,一心想找到正确答案,如果别人已经回答出了一部分,那就没理由不拿来用。足够自信地使用他人地成果,完全不担心因此丧失个人的特点。

  • 好设计常常是奇特地设计 不仅优美,而且美得很奇特。

  • 好设计是成批出现的 让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要 个人最多对趋势产生一定的影响,但你不可能决定趋势,实际上是趋势决定了你我。

  • 好设计常常是大胆的设计 无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进,必须锻炼自己。只有成为某个领域的专家之后,才会听到心里有一个细微的声音说:“这样解决太糟糕了!一定有更好的选择。” 不要忽视这种声音,要培育他们;优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。