Yurii谈开发


最近的一条热点新闻是“‘北斗’导航掉线,大货车司机自杀身亡”。据报道,当地政府已经成立了专门调查组调查此事,并发布了初步的报告,许多媒体也在跟进,相信真相不久就会水落石出。

略去事件本身的是非曲直不谈,“‘北斗’掉线”也引起了许多讨论。毕竟,按照之前的报道,“北斗”作为我国拥有自主知识产权的导航系统,是国之重器,稳定可靠。如果竟然在大货车轨迹记录这么简单的场景中都会出问题“掉线”,实在不能不让人心生疑惑。

坦白说,我没接触过大货车上的“北斗”导航仪,也不了解技术细节。但是凭借我在IT行业工作的经验,还是可以做出一般性判断的:“北斗”不可能掉线,也不应该掉线。或者说,“掉线”与北斗无关。

(more…)

按:2018年,一个偶然的机会,我以审校者的身份,参与到蒋楠先生翻译的《计算机简史》的过程当中来,并在这个过程中获益良多。今天这本书终于上市了,这是我的推荐序。

我始终认为,有一些课程是计算机专业本科应当认真教,却很遗憾没有做好的,比如软件工程,再比如今天我要说的计算机简史。

(more…)

前段时间,遇到朋友的求助,说以前运行的好好的系统现在出问题了,而且看不懂报错到底是什么意思。

我仔细看看报错信息,应该是MySQL数据库报出来的,大意是说:collation不兼容,一个是 utf8mb4_0900_ai_ci,另一个是utf8mb4_general_ci

utf8mb4_general_ci这玩意儿我见过,是针对utf8mb4编码的collation,但是utf8mb4_0900_ai_ci是啥,我也没见过。

于是我问他,这玩意儿从哪里出来的?

他说:“我也不知道,我完全没见过啊。再说,我数据库编码已经是utf8mb4了,怎么还会有这么多名堂?”

看他着急又不知所措的样子,我便花了点时间来研究,还真学到点新知识。而且我也发现,有许多程序员天真的以为“用了UTF8就等于做了国际化了,不用再担心编码问题”。看来,这个话题还真值得多讲讲。

(more…)

“软件工程”是个老话题了,我以前写过一篇文章《名不副实的“软件工程”》,当时还引起了不小的争议。回头看,当时更多的思考还是在“软件工程”本身。我们完全可以把讨论的范围扩得更大一些:“软件工程”和“工程”有关吗?如果有,到底有多大的关系?(这里的“软件”泛指IT的各种开发,不存在“软件”和“互联网”的分别。)

不要以为这些问题很好回答。在大学里,“计算机/软件开发”专业到底属于理科还是工科?似乎一直没有明确答案。到了社会上,一说起“计算机/软件”,很多人都觉得它既不同于文科,也不同于传统的“工程”(硬件)。

那么,“软件工程师”和“程序员”究竟有什么区别?似乎一直也没有人说清楚,只是名称不一样。就我所知,不少搞软件开发的人认为,软件是全新的领域,应当有全新的知识体系和工作范式,所以学校教育根本没啥用。甚至,有些人在内心看不上传统的工程人员,认为那都是“夕阳行业”的过时经验。

“软件工程”真的有这么特殊,可以大喊“我们不一样”吗?中国历史上有过“白马非马”的辩论,“软件工程”和“工程”之间也是这种关系吗?

下面结合软件工程,讲几个“传统”工程的故事。如果你也好奇“软件工程”和“工程”的关系,相信可以得到启发。

(more…)

Excel很老,Excel很土,Excel一点也不sexy;微服务新,微服务很潮门,微服务很高大上。那么,Excel和微服务有什么关系?

(more…)

因为工作的关系,最近面试了很多软件架构师,遗憾的是真正能录用的很少。很多候选人有多年的工作经验,常见的框架也玩得很溜。然而最擅长的是“用既定的技术方案去解决特定的问题”,如果遇到的问题没有严格对应的现成框架,就比较吃力。这样的技能水平或许适合某些行业,但很遗憾不符合我们的要求。

软件架构师到底应该做什么,又为什么这么难做好,这都是近来的热门问题,我也一直在和朋友们讨论。正巧,最近我看完了新鲜出炉的《微服务设计》,所以大概可以谈谈自己的看法了。因为这类问题比较抽象,也没有统一答案,我努力尝试把思路整理清楚,把表达变得流畅。最终有没有讲清楚,说的对不对,欢迎大家给我留言。

(more…)

最近的面试中我发现一个很有意思的现象。问“还记得数据库范式吗?”,大多数工作了几年的开发人员都答不上来,但是其中大多数人会补充说“虽然我不记得范式了,但我可以保证自己设计的数据库肯定都是符合范式的”。

身为技术人员,大家都知道逻辑的重要性,那么逻辑的结论就是:范式这东西完全不重要,不记得了也不妨碍使用,而且不会出错。这种结论似乎有点不合逻辑,所以有必要专门谈谈范式。

(more…)

“全站HTTPs”俨然成了目前的热门话题,很多网站都在摩拳擦掌要实行全站HTTPs。凑巧,我们(沪江)也在推行这个计划。

一开始大家想得都很简单,把证书购买了、配好了,相应的路径改一改,就没有问题。事实也确实如此,单个独立站点的HTTPs改造是很容易的。一旦走向“全站”,才发现事情远远比想象的要复杂,全站意味着所有资源面对所有客户端,涉及的因素异常多,网络上又没有太多资料,只能自己摸索。下面我简单讲讲遇到的几个问题,提供一些经验给大家参考。

(more…)

按:本文的很多观点来自与七牛云存储首席架构师道哥(李道兵)的讨论,在这里对道哥表示感谢。

高校的计算机教育与时代脱节,这已经成为大家的共识。如果要问哪些课程脱节最严重,我的答案是“软件工程”。其他的课程虽然也有脱节,但多少有点用处:编程语言虽然不教怎么把程序写漂亮,至少教了语法;网络课程虽然没有形象直观的展示,毕竟通讯协议还在使用;数据库课程不讲数据库的安装和调优,关系代数理论仍然是不少问题的原型;数据结构与算法即便看起来与开发没有直接关联,有了概念总不会吃亏……

只有软件工程,是例外。顾名思义,“软件工程”讲的应当是把软件开发出来的学问。所以,它是名不副实的:如果你按照“软件工程”教的去做,多半开发不出来软件,至少开发不出好的软件。一方面大量毕业生不会写程序、写不出好程序,另一方面合格的“软件工程师”奇缺,对这种怪异的景象,名不副实的“软件工程”功不可没。

(more…)

技术领导要不要写代码?这是一个问题。

我刚工作的时候就听说,程序员(那时候还没有“码农”的说法)是吃青春饭的,到30岁就熬不了夜写不动代码了,所以要尽早转管理岗。相应的,如果你走上管理路线成了技术领导,自然就不必干写代码这种低级重复的体力劳动了。所以当时自己代码写得很多,技术能力增长很快,但总感觉有点别扭。那感觉就像,你能把车开得又快又熟练,最终只是为了能按时到达机场赶上飞机。然后,你就再也不用开车了。

不过无论如何,赶上飞机看来是更高级的选择,为了它,放弃苦心修炼的车技也可以接受罢。

但是等我真正走上管理岗位,才发现事实和我想的完全不一样。当时公司的业务增长飞快,支持业务的系统却是几年前“一锤子买卖”的外包项目,更要命的是技术团队的人员组成和工作习惯还处在作坊状态。从我的角度来看,四下里全是大坑,填坑的速度慢得让人着急,在此过程中还经常挖下新坑…… 在我的职业生涯中,我从没有在那么短的时间里写过那么多代码。几年后大家查提交排名,我的名字仍然第一。好在我的努力没有白费,系统终于没有垮掉,顺利回到正轨。

当时我身为技术领导,除去招人、定流程、做运维,还花了大量时间写代码,这样的做法是对的吗?如果是对的,后来我再没有写过那么多代码,好像也与“不称职的领导”无缘,甚至还被夸奖过“忍住放手让下属去做事,锻炼了组织”,这又是怎么回事呢?

(more…)

Next Page »