当前位置:首页 > 单片机 > 程序员小灰
[导读]Quora平台,可以看成是美国的知乎。在Quora平台上,曾经有人提出过这样一个问题:Whataresomeofthemostbasicthingseveryprogrammershouldknow?每个程序员都应该知道哪些最基本的常识?这个问题只有64个答案,并没有很多人愿意给...

Quora平台,可以看成是美国的知乎。在Quora平台上,曾经有人提出过这样一个问题:

What are some of the most basic things every programmer should know

每个程序员都应该知道哪些最基本的常识?


这个问题只有64个答案,并没有很多人愿意给自己的答案。排名第一的答案7.9k点赞(up-vote),来自一位有故事的光头大哥(文章附录有分享他的故事),2017年写的;排名第二有1.6k点赞,来自新加坡公司PropertyGuru的高级软件工程师,也是2017年的答案。其他的答案点赞的很少。所以我们就看看前两名的答案吧。


光头大哥的答案

光头大哥的答案共25句话,附上原文、译文和一些评论。

1. 

If it's not tested, it doesn't work.

如果没被测试过,那它就不能正确运行。

评:测试自己的代码是一名程序员的基本良心。


2. 

Source control is your friend - make sure you use it.

代码版本控制是你的朋友——请确保你使用它。


3. 

Just because you wrote it doesn't mean you own it — don't beoffended if someone else on your team has to change your code.

仅仅因为你写了代码不代表你就拥有它——如果你团队里的其他人必须更改你的代码,请不要生气,感觉自己被冒犯了。


4. 

Don't reinvent the wheel, library code is there to help.

不要重复制造轮子,库代码就是为了这个存在的。


5. 

The fastest code is code that's never executed — look for early outs.

最快的代码是从未被执行的代码——查找早期的输出。


6. 

Just because you didn't write it doesn't mean it's crap.

你没写过这样的代码不代表这是垃圾。


7. 

Source code is just a hint to the compiler about what you want to do, it won't necessarily do it (e.g. You might declare a function as inline but the compiler doesn't have to obey).

源代码只是提示编译器你想做什么,但它未必会去做。例如,你可能声明了一个内联函数,但编译器未必会服从。



8. 

Code that's hard to understand is hard to maintain.

难以理解的代码也难以维护。



9. 

Code that's hard to maintain is next to useless.

难以维护的代码近乎没用的代码。



10. 

“Whilst I'm editing this file I’ll just…” is a great way to introduce feature creep and bugs.

“下次我编辑这个文件的时候,我就会……”,是一个引进功能退化和bug的好方式。



11. 

The neater your code layout, the easier it is to read. The easier it is to read, the easier it is to understand and maintain.

代码布局越整洁,就越容易阅读。越容易阅读,就越容易理解和维护。



12. 

Code is not self documenting. Help others by adding comments to guide them. You may understand it now but what about in 5 years time?

代码无法自描述。请添加注释去帮助别人理解。再说,你可能现在还能理解,但五年之后呢?



13. 

Bad Code can and will come back to haunt you.

糟糕的代码会回来困扰你的。

评:珍惜生命,别留下糟糕的代码。



14. 

There is no such thing as a 5 minute job. It'll always take at least half a day.

哪有5分钟的工作!?这至少要花半天的时间!

评:人间真实。



15. 

Magic numbers are bad.

使用"神秘数字"不好。



16. 

Constants don't take up storage, they're compile time text substitutions.

常量不占用存储空间,它们会在编译时文本替换。



17. 

‍‍‍

Project management will always want you to do twice as much in half the time.

项目管理总是希望你用一半的时间做两倍的事情。



18. 

If there is a bug, the user will find it.

如果有bug,用户会发现的。



19. 

A code review is not a criticism.

代码审核不是批判会。



20. 

It's not the quantity of code that matters, it's the quality. Any idiot can bang out 40kloc but that doesn't make it fit for purpose.

代码数量无关紧要,重要的是代码的质量。任何一个白痴都能敲出4万行代码,但这并不意味能适合于目标。



21. 

The true cost of poorly written code is in the maintenance.

写得不好的代码的真正成本在于维护。



22. 

Eat your own dog food — fixing bugs in your own code helps you code better and improves your understanding.

使用你写的dog food——修复你自己的代码能帮助你更好地写代码和提高你的理解。



23. 

Code rots over time.

代码会随着时间腐烂。



24. 

If the user didn't ask for a feature, don't add it.

如果用户没要求某个功能,那就不要添加它。


25. 

If it's not tested, it doesn't work (yes, I know I've included that twice but it's really important).

如果没被测试过,那它就不能正确运行。(是的,我知道我说了两遍,但它确实重要。)



光头大哥作为老派程序员,虽然转行了,但观点还是挺接地气的。

我们接着看第二个答案,感觉来自一位从业3-5年的程序员


1. 

Your code will never work the way you want, the very first time you code it up. Accept that. Move on.

刚完成代码的时候,你的代码永远不会按你想要的方式工作。请接受这个情况,并继续请进。

评:所以,写完代码必须自己先测试。


2.

Frustration. That’s your best buddy from now on. Get to know each other well.

挫折,从现在开始是你最好的朋友。请相互好好认识了解。


3. 

If patience is not your virtue, well ... better make it one! You are going to need it a lot.

如果耐心不是你的美德,好吧……你还是最好拥有它。你会非常需要它的。


4. 

Debugging. Learn it soon. Coz you shall be spending more time debugging than coding. If only there is something that converts our designs into bug-free code…

调试。你要快些学习它。因为你将花费更多时间在调试而不是编码。要是有什么东西能把我们的设计转换成无bug(bug-free)的代码就好了……


5. 

Stay out of the battles like Tabs vs Spaces, Vim vs Emacs, Windows vs Linux, C vs Java vs Python, Atom vs Eclipse vs Sublime vs … X!

远离技术选择优劣对比的战争,比如Tabs vs Spaces, Vim vs Emacs, Windows vs Linux, C vs Java vs Python, Atom vs Eclipse vs Sublime vs,等等。

评:没有最厉害的技术或工具,只有自己当下最合适的技术和工具。


6. 

People are going to look upto you to help them code. And look down at you to fix their PC.

人们会指望你来帮助他们编码;然后,他们低下头看你在修他们的电脑。


7. 

Do not bother with premature optimization. If people can code in languages like Python, a few microseconds shaved off, is not that big a deal.

不要为不成熟的优化而烦恼。如果人们会用Python之类的语言去开发,也就省下几毫秒。这没什么大不了的。



读完之后,你认同这些观点吗?

整体来说,我觉得他们的观点都挺好的,接地气。从质量和范围看,光头大哥的略胜一筹。


我的答案是什么?过去写过《平凡却又深刻的编程理念》系列的文章,算是当初我能给出的模糊答案,重新描述的话,即
  1. 先运行起来再改善(Make it Work then Make it Better)。

  2. 程序就是现实世界的数字世界的抽象。

  3. 一切事物都有其生命周期。

  4. 迭代即速度和质量。


过去读张一鸣的一篇文章——《越是高级人才,越要看一些基本素质》,我增加了另一条关于程序员成长的观点:技术知识决定了你的起点和速度,而技术修养决定了你的加速度!第一,你的职业起点和发展速度,极大地取决于你的技术知识。而且,越难或者需要越久才能理解的技术知识,越是有价值。如果你拥有的技术知识,别人能看一篇文章或者花几个小时甚至几天就能掌握,那么这样的技术知识没什么竞争力的。第二,你的持续发展能力更多取决于你的技术修养。如果技术修养较差,那也是会减缓甚至停滞了你的发展。特此共勉!

最后,你的答案会是什么?欢迎在留言区留下你的答案。


附录:光头大哥的故事
光头大哥叫Gavin Thornd,从发量看,想必是一名超级资深的程序员!然而,点击他的简介页面,发现他是一位摄影师!而且没有一个关键词表示他和程序员有什么关系啊!同时,从自我介绍上看出来这大哥还有点小幽默。


我想,他一定是一个有故事的人!于是我简单搜索一下他。在bing.com搜索他的名字,第一个结果是他的个人网站 https://gavinthorn.com/。然后,在网站介绍了发现光头大哥的故事——一个技术人跨界转型的励志故事


简单地翻译介绍他的经历:

他自小热爱摄像。在18岁生日收到一台单反相机后更是激发了他的创作热情,之后投入大量时间和金钱搞摄影。然而,在面临职业选择的时候,他还是听从周围人的意见,选择了一个“好”工作,最后成为了一位通信系统工程师。然而,工作多年之后,他觉得自己还是更爱摄像,而且当时的工作已经让他心力交瘁了——身体快被压力弄垮了,没时间陪伴家人也让他很苦恼。于是他辞职了,弄摄影了,每天可以多陪伴家人,身体也恢复健康了,慢慢走向人生巅峰。

嗯,看来过去的程序员日子也不好过啊。而且,从这位大哥的经历看,人还是得有点兴趣爱好的。万一哪天不想在现在的职业发展了,还能有一条后路。
程序员小灰" data-alias="chengxuyuanxiaohui" data-signature="一群喜爱编程技术和算法的小仓鼠。" data-from="0">

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭