随谈

程序员

Posted by Liber Sun on February 12, 2019

自从研究生以来,兜兜转转的代码写了已有两三年,当然并不是企业中,不是社会上。但是也算有那么一点新的体现,趁此写下来。

我想做程序员吗?

Coder,程序员。高危行业一个,我们将面临秃头的风险,健康的风险、被绿的风险、接锅的风险。 同时也是一个高收益的行业,你的逻辑推理能力、你的抽象思考能力、你的创造力、你的理解力得到极大的提升。当然高额的工资也是这个行业最目前最令人动容的优点。 在你的代码的世界中,你就是王。 创造事物的纯粹的快感,事物被他们所使用的被需要感,非重复性工作所带来的学习的乐趣无一都会让你在代码世界中如🐟得水。

但是,和其他人的依赖,理想状态下他人的代码是完整的,但是现实往往他人的设计往往是不合理的,实现拙劣的,需要花费太多的精力去研究去修改; 对他人智力的动容,在编程这个行业,你是一定会多次的多次的,对他人的代码进行惊叹与赞美,在一次次的感慨中,甚至会产生一种感觉,是不是自己没有天赋?自己是不是不适合做一个程序员呢?

我能做程序员吗?

程序员,也叫软件工程师,software engineer。 一个程序员应该是需要天赋的,需要热情,需要努力的。🥕

1️⃣点天赋

一个天才的程序员等于十个优秀的程序员,等于一百个平庸的程序员,等于无穷个拙劣的程序员。

但是天才只有一个,优秀的程序员也是屈指可数,那么平庸的程序员才可能是芸芸众生的常态,拙劣的程序员一天制作的问题可能多于解决的问题,可以说生产力等于负的,那么或许程序员不大适合你。

几多热情

当你为你的代码欢呼雀跃时,并且愿意将之作为一个珍宝给他们展示的时候(大多数时候都是敝帚自珍),那么我看到了你的热情。

当你沉浸在你的代码中时,忘记了时间,忘记了午餐、晚餐时,那么我看到了你的热情。

热爱你的工作,热爱的代码。

:keycap_ten:分努力

别问了,程序员就是十分的努力,因为你永远不知道你还有多少的东西没有掌握,你要学习的东西太多太多,这个行业永远都在追逐进步,努力是这一行所必要的。

程序员要求的品德

1.慎独克己

代码是对世界的高度抽象,是不具备”外观”的,我们在审查代码的时候,往往只能通过外部的响应来说明一个代码的好坏。

就比如下面的电线,或许代码是可以运行的,但是代码是不可维护的。

混乱电线

一个人写的代码,要严格控制自己的欲望,不依靠他人监督,克制和约束自己,达到自律的标准。

  • 先思考后写代码,清晰问题、解法、架构
  • 恰到好处的注释
  • 用心的命名
  • 对CV出来烂代码的强烈抵触
    • 可以运行就行了
    • 好累啊,好不容易运行,下次再修改吧
    • 这里可以cv,这里也可以cv,多么方便

2.克制冲动

克制自己的冲动,在我们的开发过程中,我们总是会有或许我可以重写这样的冲动。 这种冲动人人有之,在自己的地盘当山大王当然狠开心。 但是我们始终要考虑为什么别人的代码总是不尽人意?当时的技术选型的限制,需求不但的增多,代码的补丁修复。代码都会逐渐没有那么干净。 写代码往往比读代码容易,千万不可随意的重写。而且“文人相轻”,今日乍看还不错的代码,对于日后维护你的代码的人,同样心里会嘀咕或许我可以重写。 小幅度的重构是没有问题的,而且是经常、必须做的。 在自己写代码的过程中,为了不让别人重构你的代码,还是用点💗吧!毕竟是你奋斗无数个夜晚的成果。

3.换位思考

傲慢是原罪,是七宗罪中最严重的罪行。当人在某个方面懂得比别人多的时候,人们总是会产生一种傲慢的情绪。 请你尽快完成你为什么不这样做没人把我的话当回事!!!

严于律己宽以待人真的很难,做到理解他人或者具有同情心,其实真的很难,因为每个人都有自己的立场,站在别人的视角看问题并不简单。但是当你尝试之后,很多事情都会豁然开朗。 如果技术厉害,而又富有同情心,那么你所在的团队一定更为顺畅。

4.无需任何歉意的贵族专制制度

程序员和架构师之间的关系是一种无需任何迁移的贵族专制制度。 这意味着架构师 ,应该富有同情心,但不妥协。 这意味着程序员,学会妥协,但不心存芥蒂。 只有这样才能,既能获得少数头脑产生的产品完整性,又能得到多位协作人员的总体生产率,并且降低了沟通的成本。

5.好奇 java动态代理->类增强(接口增强、class增强)->运行时增强->AOP。庞大的编程世界,没有好奇心,是没办法达到一定的高度的。

计算机的潜规则

“骑虎难下”

凡事必先骑上虎背,把自己置身于 “骑虎难下” 的境地。你永远不知道你要做的东西和你已经会的东西之间是否是可以匹配的,Nothing enugh!完全准备好之后,往往黄花菜都凉了。

局部性原理

在空间和时间两个尺度上都存在这样的原理,及A被访问之后,A很可能被再次访问,同时A旁边的B也很有可能被访问。 案列: 1.Java的Hotpot区代码会被编译为Native Code。 2.缓存,CPU缓存,数据库缓存,缓存中间件等。

抽象

数据库是一种抽象、MVC是一种抽象、文件是一种抽象,抽象就是抛弃细节,将纷繁复杂的事物抽象为概念。

还有一句经典名言,没有什么是不能通过添加抽象层来解决的

分层

分层是只和邻居打交道,Web分层开发、AOP、网络协议。 关键在于 隔离变化,层与层之间的交流方式不变,某一层的变化仅局限于本层内部。

异步调用

Cpu是火箭,磁盘是蜗牛;Cpu等不及了,蜗牛你好了,叫我!!

约定大于配置

SpringBoot与Spring,Maven和Ant。 约定其实就是一种默认准则,人人约定,人人受益。 同时约定意味着一定的规律,只有存在可认知的规律,才可以抽象为约定。

革新大于革命

“新百姓苦,亡百姓苦。” 不见得新的代码就比旧的代码好到哪里去,记住代码是逐渐腐朽的,重构往往好于重写。

结语

洋洋洒洒,一大篇,点到为止。