TinyLab

Keep eyes on the star and feet on the ground.


  • 首页

  • 归档

  • 分类

  • 标签

每周回顾:直觉的力量

发表于 2015-09-06   |   分类于 每周回顾

直觉(英语:Intuition),又称为直观,通常被描述为,一种不用经过太多思考过程,很快就能出现的直接想法、感觉、信念或者偏好。当我们有某种信仰,但是不确知它的原因时,通常会将它归于是一种直觉。认知科学认为这是因为生存的演化压力而产生的人类心智能力,让人类可以快速做出判断,采取行动,它通常与右脑连结在一起。心理学与超自然学对这个能力深感兴趣。(以上内容来自维基百科)

有很多次,在我向新人演示或者帮助Ta解决宕机或BUG的时候,他们都会用诧异的眼神看着我,一脸疑惑地问道:“这么快地定位到问题,你是怎么做到的?”,然后我很装逼地对Ta说:“直觉”。当然,相视一笑之后,我还是会整理一下思路,然后解释一下推理过程。

可以快速解决问题的直觉,并非朝夕之间就能获得的。至今做了七年服务器端开发,遇到过各种各样的宕机和BUG,凌晨三四点被叫到公司家常便饭,也就仅仅获得了针对我们游戏服务器出的问题的一些直觉而已,多数时候还是挺准的。每次当我遇到一些疑难问题的时候,我心里都会默默在念:Every thing happened has a reason。事出必有因,现在没有找到原因,只是因为对问题的认识和分析还不够,考虑的还不够全面,应该分析所有可能的已知因素。就这样,你必须熟练并理解手头的各种工具和代码。正所谓熟能生巧,见得多了,理解的深了,在别人看来很难的问题也不是问题了,这是一个持久的过程,需要大量的时间和机会,当然征服问题的信念也是很有必要的。

当一个BUG/宕机出现的时候:

  • 首先要弄清楚问题,要了解正常的代码逻辑,若是中途接手别人的代码,那就得硬着头皮去理解别人的代码。

  • 然后,思考问题出现的环节,然后针对出问题的环节仔细分析代码的每个分支,往往一些很难复现的BUG很容易在分析代码的过程中发现。

  • 最后要想到的才是复现BUG并使用调试工具进行追踪调试。

PS. 记得之前在笔试阅卷的时候,看到一个关于调试器的回答,问题是:“请写下你的调试工具及其简单用法?”,有一个同学的回答:“脑子”。开始拿来当笑话,笑过之余,想一下还是挺有道理的,脑子才是最牛逼的调试器,可以进行情景模拟,还原问题发生的各种可能性,请问GDB可以吗?哈哈。

阅读全文 »

每周回顾:少一点,再少一点

发表于 2015-08-28   |   分类于 每周回顾

信息爆炸,知识爆炸,知识量在以指数级上升,据说近几十年的知识量比过去人类整个历史积累的知识量都要多。而我们的大脑的进化速度,完全赶不上知识的增长,互联网时代给予我们太多便利去获得知识了,各种免费资源取之不尽,只要有求知欲,想学习什么可以轻而易举的获取各种资料,包括书籍、课件、视频等等。有时我就在想,人类的某一个领域,甚至某一领域的某一分支的知识会不会复杂到一个人穷尽一生也学习不完的地步?或许知识的分类会更多,会更精细,届时对于那些求知欲强大的人,企图一窥全貌,知道所有细枝末节几乎是不可能的事情了。貌似现在已经是这样了。

以上是在学习数据挖掘和机器学习时候,碰到很多新知识,随便google一下,又会扯出一堆信息,有感而发。自叹记忆力大不如前,看过就忘,还有悔不该在学校没有深入学几门数学。

阅读全文 »

将Python脚本打包成可执行文件

发表于 2015-08-21   |   分类于 工具

Python是一个脚本语言,被解释器解释执行。它的发布方式:

  • .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)

  • .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。

  • 可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,…)。

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller,其它仅作比较和参考。

阅读全文 »

编码之道:面向对象的五大原则

发表于 2015-03-31   |   分类于 编码之道

面向对象编程是一种模拟现实的编程范式。问题领域的一些概念,我们会抽象成类;概念的实体,我们会抽象为对象。面向对象的思想已经比较成熟了,前人在使用面向对象编程的过程中已经总结了许多经验,然后记录下来,如:设计模式、OOD、OOP等。下面整理一下,比较大的几个指导原则,深刻理解这些原则一定能做出好的设计,写出漂亮、可维护的代码。或许你已经这么做了,只是还没有意识到而已。

阅读全文 »

编码之道:结构体 vs. 对象

发表于 2015-03-15   |   分类于 编码之道

在编程中,现实中的事物及其组织,需要用数据抽象来表示。在C++语言中,既可以使用使用过程式的struct来做数据抽象,同时也可以使用面向对象的class来做抽象。在语言层面上,struct和class除了默认访问权限不一样,其它都是一样,但本文中区别对待之,一般使用struct时代表的是数据,Plain Of Data,即就是所谓的POD类型,可以直接存档和在网络上传输。而class代表的是对象的类,支持面向对象中的各种用法。

阅读全文 »

自我超越之路

发表于 2015-03-02   |   分类于 个人管理

成为自己,成为我们能成为的人,这是生活的唯一目标 ———— 斯宾诺莎

工作七年了,一直忙着实现别人提得需求,整天面对着的就只有代码,期间迷茫过、烦躁过、甚至都想键盘一甩,该干嘛干嘛去了。偶尔,停下来想一下有些可怕,当你的生活被指派给自己的工作填满,被那些海量信息包围着。有趣没趣的,有意义的没意义的,紧急的的事情,将我们包围着,根本理不出个头绪,只能像无头苍蝇一样,肆意乱撞。不知道自己想要的是什么,是多么的可怕。

编程本该是一件有趣好玩的事情!生活本该是让人感到幸福的!我们与生俱来的激情、好奇心和求知欲都慢慢地被一点一点磨灭掉了。

就在2011年的时候,应该算是最忙的时候,项目上线,需求多如牛毛,再加上各种不如意之事,苦闷和迷茫几乎让人崩溃。也就是那个时候的一个周末,一个人呆在空荡荡的房子里面,就在想:未来的几年该如何的度过,像现在一样忙碌却到头了还不知道忙了些什么?还是要去认识真正的自己,去做对于自己来说有意义的事情?然后就抽空去阅读一些关于哲学、心理学和个人管理相关的书籍。知道了时间管理、知识管理、价值观、如何去设定目标、制定计划、发现自己的优势、高效率的工作和慢下脚步来感受生活中值得我们为之付出更多的时光。

今天写下这篇“自我超越之路”,算是对自己之前个人管理方面的总结,同时也整理一下上周部门分享中的思路,以文记之,以备他人所需。

阅读全文 »

编码之道:小函数的大威力

发表于 2015-02-12   |   分类于 编码之道

一屏之地,一览无余!对的!要的就是短小精悍!

翻开项目的代码,处处可见成百上千行的函数,函数体里面switch-case、if、for等交错在一起,一眼望不到头的感觉。有些变态的函数,长度可能得按公里计算了。神啊,请赐予我看下去的勇气吧!先不论逻辑如何,首先这长度直接就把人给吓到了。这些超大号函数是怎么来得呢?

阅读全文 »

编码之道:取个好名字很重要

发表于 2015-02-11   |   分类于 编码之道

代码就是程序员的孩子,给“孩子”取个好听的名字很重要!

我们在项目开发中,接触到的变量、函数、类多数都是项目自己定义的,往往都是为了解决一些特定的领域的问题,引入了各种各样的概念,代码里面的名字就对应着问题领域或方案领域的这些概念,所以,对于一个命名良好,代码规范,设计简洁的系统,要想非常快的理解一个系统,最直接的方式就是RTFC(Read The Fucking Code)。对于一个不断演进的系统,代码的可读性至关重要,首要要解决的问题就是名字,变量名、函数名、类名等都需要仔细斟酌,认真对待,一个能够简洁,能够清晰表达概念和意图的名字就显得尤为重要。

阅读全文 »

编码之道:是谁制造了混乱

发表于 2015-01-21   |   分类于 编码之道

项目随着时间的推移,开发人员换过了一波又一波,项目的代码被一些代码风格“狂野”的新同学们“强奸”了一遍又一遍。我们游戏服务器代码从09年时的50W行激增到现在的200W行,不得不赞叹:“还真是能写啊!”。代码混乱的程度,简直不忍直视:风格迥异的命名方式、得以米计算长度的函数、各种MagicNumber,让人摸不着头脑、缺少封装导致的大量重复代码、各种奇葩的缩进方式、拥挤在一堆,就不知道敲个空格或空行会浪费多少时间啊…。

阅读全文 »

关于线程化库

发表于 2013-09-03   |   分类于 架构

对于我们做游戏服务器开发的来说,多数都在Linux平台下作开发,经常用到pthreads(Posix Threads)库。Windows下的线程化库没有用过,据说和pthreads多数API都比较类似。提供线程创建、销毁、Join、mutex/临界区、条件变量等。这些api把数据同步和对线程的控制权全部交给程序员,给程序员以极大自由,同时也带来一堆麻烦。除此之外,还有那些比较通用的线程化库呢?

阅读全文 »
1…456…13
David++

David++

123 日志
25 分类
65 标签
RSS
GitHub 知乎 微博 豆瓣
© 2007 - 2021 David++
由 Hexo 强力驱动
主题 - NexT.Pisces