扒一扒知乎上的帖子——“为什么有些大公司技术弱爆了?”

helpless

知乎上看到一个热帖,我觉得很有意思,叫做“ 为什么有些大公司技术弱爆了?”。我刚看到标题的时候,先入为主和刻板偏见了一下,正如同第一个回答一样,我皱了皱眉头,产生了对题主的鄙视之情;但是很快,读完帖子以后,我却立场明确地站到题主一边了。正如同里面有位回答:

看题目以为是题主傻逼,看了正文发现真的是公司傻逼。

上面这种情况其实发生的概率挺低的,但是我觉得这回是真的发生了。

但是令我感到遗憾的是,各式各样的回答里面,大部分居然都跳出来“教育”题主,表态这个世界就不是完美的,表态要妥协要接受这样的事实,要无奈地咽下这个现实的苦果。这个大面积出现的观点,太不正常了吧?

比如这样的话:

写好代码是

[……]阅读全文

常用命令归纳:Linux/Oracle/JVM/Git

经常用到一些命令,还总是忘掉的,就简单列在这里。总是现查也挺麻烦的。

Linux:

  • top mem consumer: sudo ps -aux | sort -k4nr | head -5 or top, then press M
  • connection number: netstat -an | grep ESTABLISHED | wc –l
  • process number: ps -ef | wc -l
  • threads of a process: ps uH p <pid> | wc -l
  • .tar: tar -xvf archive.ta

[……]阅读全文

追求纯粹

pure

偶然想到的这个话题,工程师做工程是一方面,而作为单纯的程序员,总是充满对于纯粹的追求。

最近又负责了一个使用 Angular 的项目,我们知道 最近 Angular 很火 ,其中一个重要原因就是它给前端开发带来的变革,第一次发现可以让以前如此恼人的变量绑定消失掉。以往变量绑定的语句放在附属于页面的一个 js 片段(文件)里面,颇有些无奈的意思,如果把它视为展现层面的东西,显得很不直观(声明式编程才是最直观的方式),而且让这一层变得啰嗦;而如果把它视为下面一层的东西,这又让逻辑代码变得不纯粹——凭什么要让逻辑代码去了解哪个 dom 叫什么 id?于是 Angular 来了,引入了$Scope 这代表上下文的东西,变量绑定

[……]阅读全文

重新发明轮子

wheels

“ 不要重新发明轮子” 是总是可以听到的话,在评判一个设计的时候,总是听到这样的话。但是凡是不绝对,而对于这句话来说,很多情况下,都是错误的。我甚至都不能说出“ 大多数情况下不要重新发明轮子” 这样的话,因为具体问题,实在没法用大多数还是少部分来概括。重用轮子有什么好处?省代码;轮子已经经过千锤百炼,质量有保障;轮子功能在逐步更新中,可以看到未来的获益。但是,也有一些情况让我无法重用轮子。

第一种情况,我只需要一点沙土,我不需要整座大山。

比如,我只需要一个 StringUtil.isEmpty 这样的方法,判断字符串是否为空串或者 null,如果引入

[……]阅读全文

三番+硅谷游记

已经从加州归来一周多,本来不想写游记了。但是前几天整理照片的时候发现,有趣的东西还是有一些的,那就写一些文字吧。

大致的行程:四天。第一天在三番市区,人文线,并夜登双子峰;第二天沿号称最美公路的一号公路南下,经过 Santa Cruz,直到十七迈;第三天休息半天,然后前往世界最大的人工公园——金门公园,傍晚去金门大桥;第四天在硅谷的 101 公路沿线转悠,去了 Facebook 和 Google 等几家 IT 公司,还有斯坦福大学。

Presidio 公园我们停靠了两个景点,一个是沙漠和海滩结合起来的 Baker Beach;一个是 Crissy Field,湖+海湾的组合,可以望得到恶魔岛。

IMG_5415 IMG_5448

去渔人码头闲逛和

[……]阅读全文

“残酷”的事实

crazy

下面这些文字来自我在知乎的回答:“在真实工作中的编程是怎么样的,与学校里有什么不同?”

入行愉快。

首先,一言以蔽之,用两个字来概括,就是“残酷”,但是,好在是加引号的。有的不但残酷,还很无奈;有的则是在残酷的同时,还很有趣。搞工程和学校里的象牙塔大不相同,这也许老早就知道,但是绝对不是七八年前我想象的模样。你可以把它当成我没睡醒的呓语,也可以当成我喝多的胡话,或者是心情太差的时候写的吐槽檄文。反正,它们就在那里,事实就在那里。

总的来说,学校里面编程,或者在工作之余编程,是很有趣的,没有 manager 给你各种压力,也没有各种大神(比如 TMP、PM、SE 等等我都搞不清楚干嘛的职位)给你指点

[……]阅读全文

三百篇文字纪念

mem 光是 放在 blog 上面 的文字,已经超过三百篇。我觉得哪怕是在工地拉砖头,也应该是时候直起腰回头瞅瞅了。所以就有了此文,但是和十多年前的我不同的是,我应该不会发很多牢骚,而另一方面,我也不像是个理性到每逢这种时候都要摆一大迭数据出来说事儿的人。所以,大概还是扯扯东、扯扯西,这篇纪念就过去了。这当中该用力地记到脑子里的,会慢慢沉淀下来。

宏观地且从粗暴的统计来看,大概两年前的我,那个时候是最能写的。那段时间无论往前数还是往后数,生活或工作的繁忙程度都要增加许多,这无疑影响了我做这些笔头事情的效率。

最近可能是年纪增长的关系,我不断在思考一件事情,到底做点什么才是最值得的。我不是什么特别有规划的人,

[……]阅读全文

练琴

piano 以前有一个电子琴,只是时不时的折腾一番,也没有养成良好的读谱习惯,进步很慢。其实很多人都和我一样,心中从小就有一个各种各样的和艺术沾点边的梦,身边有画画很棒的,有下棋很牛的,还有同事每个月都会去跳舞,我和我老婆说,从小就喜欢折腾各种音乐器械,要不我也正儿八经学学钢琴,开发开发智力?她说,要不先弄你的电子琴吧,要是能坚持下来,再投资钢琴。差不多快一年,事实证明这个兴趣应该是可以坚持下去的。于是请了老师,每周一课。又过了一段时间,老师说,你得去弄一台真正的钢琴了,电子琴不是长久之计。

我做了做功课,有位同事家也有钢琴,不过是电钢琴,看到其中的好处之后我有点心动(比如可以调音量,便携,还可以编曲)

[……]阅读全文

从构建和测试的效率说起

最近的工作总是在 EMR 上跑 Spark 的 job,从代码完毕到测试完毕的过程是这样的:

1. 本地测试:

    构建 -> 本地 UT -> 观察分析结果,这一阶段可以发现逻辑问题

2. EMR 上执行测试:

    上传最新构建到 S3 -> 准备 EMR 资源(包括计算资源和数据)-> 在 EMR 上执行 Spark job -> 观察分析结果,这一阶段可以发现在数据量较大的情况下才出现的问题

3. Workflow 集成测试(这个 workflow 是公司内部的一个管理 job 的工作流系统):

  &nb

[……]阅读全文

Scala 的模式匹配

scala

最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的 文章 ,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,

[……]阅读全文

我眼中的范加尔

LvG

写在双红会之后。曼联遇到利物浦,最近这一年多来,总是可以拿到酣畅淋漓的胜利。从莫耶斯到范加尔,其中的转变,这是一个缩影。毫无疑问范加尔是个颇具争议的主教练,他的身边从来不缺新闻话题,而且他的孤傲和弗格森还不一样,他喜欢把各种内部消息往外抖,说他心直口快也好,说他脑子缺根筋也好,反正记者爱听他爆料,球迷也爱听啊。就在没多久前,因为花了几千万签下一个名不见经传的马夏尔,还受到各方质疑,连他自己都承认,这个价格有点疯狂。

战术层面

说范加尔战术死板那绝对是有道理的。事实上,球员被允许自由发挥的余地并不大。关于球员自由发挥,这个和教练有着密切的关系。范加尔是个典型的 control freak,从训练

[……]阅读全文

七年工作,几个故事

journey

从毕业工作到现在,已经有七个年头,年头虽然不久,但是回过头来看看那些经历的好的坏的有趣的扯淡的事情,还是有很多东西可以总结。所有人都会或多或少走弯路,本来成长就是这样一个过程,有时候想起来会感叹,有时候会唏嘘,有时候会一笑而过。我的前一半时间是在华为,这段时间留给我很多回忆(比如 这几个瞬间);后半时间在亚马逊,也给了我不少感慨的机会。下面这些故事都是我经历的真真实实的事,有的事情已经过去好久,但我不想把它永远尘封。也许你和我在某些方面,会有共同的体会。

在我说这些故事前,或者说,吐这些槽前,我想说这样三个观点。

首先,为自己工作。

不是为父母,不是为同事,不是为公司,[……] 阅读全文

谈谈曼联今年的位置竞争和引援

manutd

看完两场英超,引援上估计除了待定的佩德罗以外,不会有什么大的变数了。想起去年赛季伊始,在知乎上面 回答了几个和曼联有关的问题 ,现在正好回过头来扒坟,比如关于曼联的拉斐尔,说“ 他也就是一员猛将,刚猛有余,智慧不足,前途平庸”,目前看来是正确的,已经离开前往法甲;说费莱尼“ 在当前全攻全守和控球理念强调下范加尔治下,费莱尼很难在球队中有他的一席之地”,很遗憾这条错得离谱,但是话说回来,费莱尼尽管上个赛季令人惊讶,但是我依然认为他和范加尔脑海中的建队思路有所违背,位置不稳的。范加尔上任以后屡遭非议,即便在去年范加尔成绩最差的时候,差到都不如同期莫耶斯,

[……]阅读全文

系统设计的典型分层和涉及的知识点

作为系统设计学习的一部分,不久前在梳理面试中典型的系统设计问题,发现大部分都可谓有套路可寻。我把思路梳理了一下,简单整理到下面这张图表里面:

System Design Layers

对于其中的内容,稍微补充几句:

  • 系统设计需要经验的积累,但也确确实实有章可循。问的问题考察的类型很集中,比如同步、异步,消息 push 和 pull,根据实际问题设计存储的数据结构,对于 scalability、availability 的认识等等。最喜欢被问到的问题,我在 《系统设计典型问题的思考》 这里列了几个。
  • pull on demand 和 push on change 是消息系统里两种极其典型的消息传播方式,基本上设计 twitte

[……]阅读全文

几道抛硬币问题

coin toss

只是记录一下遇到的几道抛硬币的概率问题。

 

1、平均需要抛掷多少次硬币,才会首次出现连续的两个正面?

假设连续两个正面的期望是 E,那么,先看第一次抛硬币:

  1. 如果抛到反面,那么还期望抛 E 次,因为抛到反面完全没用,总数就期望抛 E+1
  2. 如果抛到正面,那么要看下一次,如果下一次也是正面,那抛硬币就结束了,总数是 2;如果下一次是反面,那么相当于重头来过,总数就期望抛 E+2

于是可以得到如下关系式:

E = 0.5(E+1) + 0.25*2 + 0.25(E+2)

得到所求期望 E=6

现在把题目拓展,不是说“连续两个正面”,而是“连续 n 个正面”呢?

这个问题 Matrix67 有非常有趣的解

[……]阅读全文

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)

programming language

这是这个系列的最后一篇,从编程范型的角度概览,前面几篇的链接在文章后半部分有汇总。

我在之前已经 介绍过编程范型的概念 ,而事实上,我们到现在为止,纠结在这四门迥异的语言上面,浅看是各种语言特性,深看就是编程范型和思维方法。

下面这张“神图”来自于 这里 ,可以说是对于范型和语言归类的概览,从左往右从更强的声明式向着更弱的声明式发展;依据状态分为 Unnamed state(串行或并发,包含逻辑式和函数式这几种分类)、Nondet. state(所谓的不确定性状态)和 Named state(包含数据流、消息传递和状态共享这几种分类),Haskell 出现在了左侧函数式语言的分支内,而 Java 出现在了右侧

[……]阅读全文

关于远足

hiking

昨天刚从 Lake 22 远足回来,感觉很疲劳,回想起这些时间的远足经历,可以写一写其中的感受。如果你也有此长期计划,打算用远足的方式来充实生活,或者锻炼身体,甚至只是打发时间,那可以参考下面的文字。

首先,我不是驴友,我也没有专业的远足设备。我只是在周末天气不错的时候,用远足的方式给自己找点乐子。经过一段时间的熏陶以后,就像写博客一样,已经养成了习惯。我在 《旅行映像》 里贴了一些远足的图文记录,但是远足带来的体验,远不止所谓的“看风景”。本人甚业余,专业党、野餐党请绕路。

准备工作很简单,但是却少不得。平均起来,一个月四周的话,基本上有三周我都会去选择远足,时间一般都在周末。如果要去远处,或者步

[……]阅读全文

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(DSL)

dsl 这是《从 Java 和 JavaScript 来学习 Haskell 和 Groovy》系列的第四篇。

首先来理解 DSL。

DSL(Domain Specific Language)指的是一定应用领域内的计算机语言,它可以不强大,它可以只能在一定的领域内生效(和 GPL 相比,GPL 是 General Purpose Language),表达仅限于该领域,但是它对于特定领域简洁、清晰,包含针对特定领域的优化。

当我们面对各种各样的特定需求的时候,一个通用的语言往往不能高效地提供解决问题的路径,相应的 DSL 并不是并非要解决所有的问题,但是它只关注于某一个小领域,以便解决那一个小领域的问题就好了。比如 HTML,只用

[……]阅读全文

想起那些听过的流行歌曲

lizongsheng

我们这一代人,很多都有一个不断演化着的音乐的梦想。

我们欣赏过很多音乐,听过很多歌,打开豆瓣音乐的时候,当我选择“八零后”频道,我确确实实感受到这些歌曲就是属于我的世界的,很难解释其中的原因。

虽然现在有时候依然去听那些新歌,但是就是很难再找到那根打动自己的神经。

我听张信哲的歌,最早最喜欢的是《别怕我伤心》,甚至在一些公众场合我都愿意拿出来唱一唱。

还有《爱如潮水》,当时买的是磁带,哪有什么 CD 啊。

后来看了《宝莲灯》,一遍遍听《爱就一个字》。

我听梁静茹的歌,从最早的《一夜长大》开始。我喜欢她那些有故事的歌曲。她有很多歌不只是曲子好听,歌词也越听越有味道。

有一首歌,《绿花》,词曲我都非

[……]阅读全文

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(元编程)

metaProgramming

本篇文章的话题是元编程。首先来认识元编程,我在第一篇 《引子》 里面已经介绍:元编程,指的是在运行时改变“类”的定义,例如访问、增加或修改等等。一言以蔽之,就是“用程序来写程序”。在第二篇的 《类型系统》 里面已经借由继承和接口的实现,介绍了一些利用元编程特性来增加或改变子类行为的方法。回顾语言发展的长河,其实是经历了一个从“对象 -> 类 -> 元类”到“对象 -> 原型”的发展过程的。所以,无论是类,还是元类,这样的概念其实都不是非有不可的,只是因为我们思考的习惯,特别是抽象的习惯而顺其自然地产生了。这一点我在 《编程范型:工具的选择》 里面已经详细描述了,建议在往下阅读前移步。

[……]阅读全文

back to top