程序员

首页 » 常识 » 预防 » 为什么优秀的程序员喜欢命令行
TUhjnbcbe - 2020/12/31 18:08:00
北京治疗白癜风哪家医院最权威         http://m.39.net/pf/a_4782734.html

失败并不意味你浪费了时间和生命,失败表明你有理由重新开始。

帮助你练脑子的逻辑思维题:

斗地主附残局地主手中牌2、K、Q、J、10、9、8、8、6、6、5、5、、、、、7、7、7、7长工甲手中牌大王、小王、2、A、K、Q、J、10、Q、J、10、9、8、5、5、4、4长工乙手中牌2、2、A、A、A、K、K、Q、J、10、9、9、8、6、6、4、4三家都是明手,互知底牌。要求是:在三家都不打错牌的情况下,地主必须要么输要么赢。问:哪方会赢?

答案将会公布在下一期的文章里(听说长得帅气的都做出来了)

上一期的答案公布:

1
   2
   
  4 
  5蓝房子
  绿 *  红
   白北京人 上海 香港 天津
  成都茅台酒 葡萄 矿泉水 茶
  啤酒豆腐
   面条牛肉 比萨
  鸡健牌
  希尔顿 万宝路  红塔山马
   狗
  蛇
  猫
  鱼

(你答对了吗?)

今天推送一首回音哥的歌,他一直是个很神秘的人,也一直不露脸,不过声音挺不错的,大家可以听一下,祝大家周一好心情,加油,坚持到6点下班啦~

IT短新闻时间:

一家流淌着年轻人热血的中国公司要在美国上市了。

美国时间年月2日,哔哩哔哩弹幕网(B站)向美国证监会提交IPO申请,拟在纽约证券交易所挂牌上市,股票代码为“BILI”,计划融资4亿美元。这可能是中国互联网公司“最热血”的一次IPO了,毕竟“90后第一股”的称谓除了B站,简直没法送给其它任何人。

在更“成熟世故”的商业界看来,B站的上市申请与前两天提请在纳斯达克上市的另一家中国公司——爱奇艺,本质上没什么区别。都是在线视频网站,都在亏钱。不过对B站来说,与爱奇艺相提并论可能真是个“白马非马”的故事。

它背后的问题是:我们该如何看待B站商业价值的异质性。B站被打上的两个标签是:“中国Z世代”和社区。而实质上,B站的模型应该是社区和内容分发,而通常意义上“视频网站”的归类,对B站是一种典型的商业误读。

看多了爱奇艺、优酷和腾讯视频们以及它们背后Netflix式的故事,是时候看看“视频网站”这个领域的新故事了。它的背后是新的一代人,以及一种新的文化。

图片来源:it之家

为什么优秀的程序员喜欢命令行?

要给优秀的程序员下一个明确的定义无疑是一件非常困难的事情。擅长抽象思维、动手能力强、追求效率、喜欢自动化、愿意持续学习、对代码质量有很高的追求等等,这些维度都有其合理性,不过又都略显抽象和主观。

我对于一个程序员是否优秀,也有自己的标准,那就是TA对命令行的熟悉/喜爱程度。这个特点可以很好的看出TA是否是一个优秀的(或者潜在优秀的)程序员。我周围就有很多非常牛的程序员,无一例外都非常擅长在命令行中工作。那什么叫熟悉命令行呢?简单来说,就是90%的日常工作内容可以在命令行完成。

当然,喜欢/习惯使用命令行可能只是表象,其背后包含的实质才是优秀的程序员之所以优秀的原因。

Perl语言的发明者LarryWall有一句名言:Thethreechiefvirtuesofaprogrammerare:Laziness,ImpatienceandHubris.–LarryWall懒惰(Laziness)这个特点位于程序员的三大美德之首:唯有懒惰才会驱动程序员尽可能的将日常工作自动化起来,解放自己的双手,节省自己的时间。相比较而言,不得不说,GUI应用天然就是为了让自动化变得困难的一种设计(此处并非贬义,GUI有着自己完全不同的目标群体)。GUI更强调的是与人类的直接交互:通过视觉手段将信息以多层次的方式呈现,使用视觉元素进行指引,最后系统在后台进行实际的处理,并将最终结果以视觉手段展现出来。

这种更强调交互过程的设计初衷使得自动化变得非常困难。另一方面,由于GUI是为交互而设计的,它的响应就不能太快,至少要留给操作者反应时间(甚至有些用户操作需要人为的加入一些延迟,以提升用户体验)。

程序员除了写代码之外,还有很多事情要做,比如自动化测试、基础设施的配置和管理、持续集成/持续发布环境,甚至有些团队还需要做一些与运维相关的事情(线上问题监控,环境监控等)。

开发/测试

基础设施管理

持续集成/持续发布

运维(监控)工作

娱乐

而这一系列的工作背后,都隐含了一个自动化的需求。在做上述工作时,优秀的程序员会努力将其自动化,如果有工具就使用工具;如果没有,就开发一个新的工具。这种努力让一切都尽可能自动化起来的哲学起源于UNIX世界

而UNIX哲学的实际体现则是通过命令行来完成的。

Wherethereisashell,thereisaway.

UNIX编程哲学关于UNIX哲学,其实坊间有多个版本,这里有一个比较详细的清单。虽然有不同的版本,但是有很多一致的地方:

小即是美

让程序只做好一件事

尽可能早地创建原型(然后逐步演进)

数据应该保存为文本文件

避免使用可定制性低下的用户界面

审视这些条目,我们会发现它们事实上促成了自动化一切的可能性。这里列举一些小的例子,我们来看看命令行工具是如何通过应用这些哲学来简化工作、提高效率的。一旦你熟练掌握这些技能,就再也无法离开它,也再也忍受不了低效而复杂的各种GUI工具了。

命令行如何提升效率

一个高阶计算器

在我的编程生涯早期,读过的最为振奋的一本书是《UNIX编程环境》,和其他基本UNIX世界的大部头比起来,这本书其实还是比较小众的。我读大二的时候这本书已经出版了差不多22年(中文版也已经有7年了),有一些内容已经过时了,比如没有返回值的main函数、外置的参数列表等等,不过在学习到HOC(HighOrderCalculator)的全部开发过程时,我依然被深深的震撼到了。

简而言之,这个HOC语言的开发过程需要这样几个组件:

词法分析器lex

语法分析器yacc

标准数学库stdlib

另外还有一些自定义的函数等,最后通过make连接在一起。我跟着书上的讲解,对着书把所有代码都敲了一遍。所有的操作都是在一台很老的IBM的ThinkPadT20上完成的,而且全部都在命令行中进行(当然,还在命令行里听着歌)。

这也是我第一次彻底被UNIX的哲学所折服的体验:

每个工具只做且做好一件事

工具可以协作起来

一切面向文本

下面是书中的Makefile脚本,通过简单的配置,就将一些各司其职的小工具协作起来,完成一个编程语言程序的预编译、编译、链接、二进制生成的动作。

YFLAGS=dOBJS=hoc.ocode.oinit.omath.osymbol.ohoc5:$(OBJS)cc$(OBJS)lmohoc5hoc.ocode.oinit.osymbol.o:hoc.hcode.oinit.osymbol.o:x.tab.hx.tab.h:y.tab.hcmpsx.tab.hy.tab.h

cpy.tab.hx.tab.hpr:hoc.yhoc.hcode.cinit.cmath.csymbol.c

pr$?

touchprclean:rmf$(OBJS)[xy].tab.[ch]

虽然现在来看,这本书的很多内容已经过期(特别是离它第一次出版已经过去了近0年),有兴趣的朋友可以读一读。这里有一个Lex/Yacc的小例子的小例子,有兴趣的朋友可以看看。

当然,如果你使用现在最先进的IDE(典型的GUI工具),其背后做的事情也是同样的原理:生成一个Makefile,然后在幕后调用它。

基础设施自动化

开发过程中,工程师还需要

1
查看完整版本: 为什么优秀的程序员喜欢命令行