资深程序员总结的成功十大黄金定律

article/2025/8/7 1:54:53

《天下无贼》中由葛优饰演的黎叔曾说过一句话:“21世界什么最贵?——人才最贵。”人才对成功来说至关重要,而且人才和天才还是不一样的,天才大部分是要有天赋的,而人才即使你没有天赋,遵照规律发展,通过后天努力也可以达到。

如何才能成为一个顶尖的程序员呢?Java顶尖程序员Lukas Eder和我们分享了伟大程序员应该具备的十大特质,他表示这十大特质并不是伟大程序员所特有的,任何领域的领导者可以说都有这些特质。当然这只是Lukas Eder的一家之言,如果你有不同观点或者其它补充欢迎在下方留言评论。

1.学会提问

在日常的工作和生活当中,我们常常会遇见以下几种人:

  • 完美主义者:当开源工具出现问题时,可能这时程序员通过调试代码找到了问题的真正原因就万事大吉了。但是完美主义者就不会这样,他们往往会重新看待这个问题,重现步骤,并找到潜在的解决办法。
  • 善谈者:这一类人几乎不会正式的提出问题。因为他们很喜欢和大家交流自己的想法,在交谈中他们就会提出自己的疑问,征询大家的意见或者自己主动去找到答案。
  • 代码搬运工:这类人面对问题往往会是这样的反应,“这是一段代码,为什么它会出问题呢?”少年,请不要放弃治疗啊!
  • 经理:这类人由于职业的特殊性,他们往往尊崇时间就是金钱,出现问题一定要在最短的时间内解决。大多数情况下,这种“急行军”式解决问题的方式会忽略掉一些细节,导致问题的解决治标不治本。
  • 抱怨者:这类人也不会提出问题,他们遇到问题就只会抱怨,但是你要知道抱怨其实是无济于事的。

工作学习到如今,相信每一个程序员都明白解决一个问题比书本知识要收获多,所以在日常工作中一定要善于发问,遇到问题要积极解决。

2.学会自我思考

上一条我们讲了如何提问,这一条我们又要讲如何避免提问,你可能会想这是不是自相矛盾呀。其实这并不矛盾,上一条我们是要大家善于发现问题,而这一条我们讲的是发现问题之后,首先要尝试自己解决,而不是寻求他人帮助。

很多人认为遇到问题寻求他人帮助是解决问题最有效的途径。其实不然,如果你去尝试自己解决问题,就会发现这种方式好处不要太多:

  • 首先,你会掌握一种自我学习的方法,请记住,方法永远比知识更重要。
  • 自己解决的问题印象更深刻,自己找到的知识更有价值。
  • 剔除掉无用的“噪音”,因为每个人对于问题的理解不同以及个人表述的局限,向别人求助时,往往不会准确的获得问题的解决方案。
  • 解决问题不能一味图快,如果短时间内问题不能得到完美解决,那么你可以再给自己一段时间去收集更多的信息,这样往往会得到更好的解决。
  • 通过解决问题来训练自己,从而提出更有价值的问题。

3.欲速则不达

在这个被“快餐文化”充斥的世界,人类想要所有的事情都加速进行,程序也不例外。在现实生活中,程序员为了赶进度,及时上交项目,往往会找捷径来解决。但是代码不会说谎,你对代码不给予足够的重视,那么你的应用程序效果不好就几乎是必然事件。

本杰明·富兰克林曾说过:低价格的甜蜜被忘记后,低质量的痛苦会存在很久。所有的事情都是如此,当我们通过某种手段快速获得胜利,这胜利背后一定会有很严重的后遗症。

4.理想的软件应该是确定性的

在理想的世界中,软件中的一切都是“确定性的”,而我们是功能性的程序员,只编写特定功能,就像String.contains(),无论执行多少次结果总是和预期的相同,这就是确定性。

图0:资深程序员总结的成功十大黄金定律

我们也可以在自己的程序中编写类似的 side-effect (副作用)模块,这会让我们的编程有更多的选择空间。确定性编程可以使用任何语言来完成,有些语言可能有很多工具通过复杂的类型系统来规避意外的副作用。但是,在下面的例子中,我们是允许确定性的:

图1:资深程序员总结的成功十大黄金定律

5.墨菲定律

上文中我们说到理想的世界是确定性的,而现实世界却是不确定的,处处充满惊喜和意外。相信看过《爱情公寓》的人,都对胡一菲说过的墨菲定律印象深刻,简单来说,墨菲定律就是当一件事情看似是好坏几率相同,但是它往往会朝着坏的方向发展。

所以,在编写代码的时候,我们也要考虑墨菲定律,对于代码中的小漏洞不要抱有侥幸心理,要尽量完善自己的代码。

6.摒弃“教条主义”

Jochen Mader曾说:“A good developer is like a werewolf: Afraid of silver bullets.”(中文可以理解为一个好的开发者就像狼人一样,也惧怕银子弹。)

我们所学到或者教授的知识都存在潜在的错误,尤其是在你风头正盛的时候。

程序员这个职业其实并不纯粹,我们总是喜欢把自己当做数学家,认为最纯粹的思想会一直存在,并且一定是正确的。其实,程序员的职业建立在数学之上,是满足现实世界业务需求的务实世界,坦白的说,这并不完美。

我们来看一些最流行的编程语言:

  • C
  • Java
  • SQL

这些语言都和数学既有关联又不完全一样,例如C语言的段错误、Java泛型或者是SQL三值逻辑。编程语言是由实用主义者建立的平台,所以我们会发现有些功能的背景很浅白,而那些理论背景很酷的往往没有被采用。

不仅是编程语言,建立在编程语言之上的库、设计模式、架构等等都是如此。为上下文设计的工具没有对错,它们的本质就只是工具而已。作为程序员,有时你不必搞清楚这些工具的来龙去脉,只要用好它们就可以了。

  • XML
  • JSON
  • 功能编程
  • 面向对象编程
  • 设计模式
  • 微服务
  • 三层架构
  • DDD
  • TDD
  • In fact:* DD

7.温故而知新

论语中有这么一句话“温故而知新”。很多程序员停留在“好”或者是迈向“好”的路上,而没有成为伟大的程序员,原因就是因为他们只实践了这句话的前半段。

这些程序员总是在做自己熟悉的事情,并通过多次练习逐渐更快的完成任务。

而伟大的程序员还得看重这句话的后半段,完成这个功能,不仅要完成的快,还要完成的有新意。

8.专注于一个目标(这里指的是长远目标)

最近,全栈工程师是很火的一个概念,其实在我看来,好的全栈工程师不常有,大多数的全栈工程师是各方面都成绩平平,可能他熟悉很多业务逻辑,可以快速引导一个新的软件,但是这种工作是非常粗糙的,也许对于最小可行的产品阶段是好的,但从长远来看,这会导致更复杂的问题,甚至会使整个开发团队的成员都无法进行正确分析。

与其,做一个马虎的全栈工程师,还不如只专注一个方向,并且扎根下去,精益求精。

9.广泛涉猎

虽然我们在上一条让大家选择一个方向来仔细专研,但是伟大的程序员要有千手千眼,技术的更新速度大家是有目共睹的,如果故步自封,不去积极接受新的知识,那么在计算机这个领域,你很快就会被淘汰掉。

通过新的范式和技术的学习,你可以接触到和以前完全不同的思维方式,而这种全新的思维方式可能会在未来的某一时刻给你带来意想不到的效果。

10.一切都应该尽可能地简单,但不要太简单

爱因斯坦曾说过:“一切都应该尽可能地简单,但不要太简单!” 在软件中,复杂性是最好的杀手,而简单性则是推动者。简单性说起来容易,但是真正实现却需要大量的时间和实践。

首先,实现简单性,遵循前辈流传下来的规则就是一条捷径。例如,我们大家都知道String.contains()方法,所以当“abcde”.contains(“bcd”)出现的时候,我们立马就知道结果了。当然,软件的业务逻辑可能不像上面的例子那么简单,但是通过多次练习,也是可以有规律可循的。


转载:http://www.techug.com/post/10-golden-rules-for-successful-progrommer.html


http://chatgpt.dhexx.cn/article/jgib2EWW.shtml

相关文章

什么是汉明窗?加Hanmming窗的作用?

1.什么是汉明窗? 从语音的角度说 理论: 语音信号是一种非平稳的时变信号,其产生过程与发声器官的运动紧密相关。而发声器官的状态变化速度较声音振动的速度要缓慢的多,因此语音信号可以认为是短时平稳的。研究发现,在…

hanmming窗和hamming窗的作用

什么是汉明窗?加Hanmming窗的作用? 1.什么是汉明窗? 答:我是做语音识别的,我就从语音的角度跟你说一下吧。 语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对…

LFM回波信号仿真,加汉明窗,可用的matlab代码

LFM回波信号仿真,加汉明窗,可用的matlab代码 运行结果(文尾有程序) 在数字信号处理过程中,每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。 即使是周期信号&…

matlab汉明窗dft,谱分析中窗的选取

信号截断及能量泄漏效应 数字信号处理的主要数学工具是傅里叶变换,而傅里叶变换是研究整个时间域和频率域的关系。然而,当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。取用有限个数据,就是将信号进行加窗函数操…

语音信号处理(二):矩形窗和汉明窗时域波形和频域波形

一:通过代码实现 clear all; hzeros(10000,1); h(2001:8000)1; % 在2001-8000上令值为1 subplot(2,2,1); plot(h,r-); title(矩形窗时域波形); xlabel(样点数); ylabel(幅度); hold on; axis([0 10000 0 1.5]);wh(2001:2060); Wfft(w,1024); % 对w进行1024点fft计…

语音识别之——mfcc什么是汉明窗,为什么加汉明窗

为什么要加汉明窗?什么叫加窗? 在信号处理中,可以说加窗处理是一个必经的过程,因为我们的计算机只能处理有限长度的信号,因此原始信号X(t)要以T(采样时间)截断,即有限化,…

窗方法原理之矩形窗及汉明窗

窗口设计法 窗口设计法是从单位脉冲响应着手,使h(n)逼近理想的单位脉冲响应序列hd(n)。我们知道hd(n)可以通过对理想频响求DTFT反变换获得 理想频响是分段恒定的,在边界频率处有突变点,所以,这样得到的理想滤波器单位脉冲响应hd(n…

【信号与系统】信号频谱和测量之汉明窗

【信号与系统】信号频谱和测量之汉明窗 信号频谱和测量傅里叶变换汉明窗汉明窗函数 频谱计算示例输入示例代码运行结果 示例2-书中示例参考资料 信号频谱和测量 傅里叶变换 汉明窗 实际情况中,由于无穷的积分范围问题,需要减少测量信号的时间&#xff…

matlab hamming 原理,Matlab中加汉明窗 ahmming 作用

转自:http://www.cnblogs.com/lxy2017/p/4049124.html 1.什么是汉明窗? 语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行…

矩形窗、汉明窗效果对比(matlab)

直接上代码: clear all; close all; f11e3;f21.8e3; Fs6e3; M60;N2048; n0:M-1; xcos(2*pi*f1*n/Fs)0.05*cos(2*pi*f2*n/Fs); k0:N-1;DFs/N;%频谱分辨率 f1fft(x,2048);%加矩形窗DFT hmhamming(M);%汉明窗 f2fft(x.*hm,2048);%加汉明窗DFT plot(k*D,10*log10(abs(f…

Hamming(汉明)窗的原理介绍及实例解析

概念   在数字信号处理过程中,每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么&#xff…

基于MATLAB的FIR滤波器性能仿真,对比矩形窗、汉明窗,海宁窗,布莱克曼窗

目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 矩形窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致加窗过程中带进了高频干扰和频谱泄漏。 汉宁窗又称升余弦窗,汉宁窗使主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观点出发,汉宁窗优于矩形窗。…

汉明窗试分析

I、预备知识: 1)帧:简单说,有一段语音信号,分成很小的一段一段的等长的信号,这其中一段就是一帧。—通常一秒取约33帧到100帧,也就是说一帧大约时长为1s/100-1s/33。(如下图为一段语…

一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别,如何选择窗函数

一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别 海宁窗和汉明窗时域波形频域响应matlab window 工具 如何选择窗 数字信号处理离不开频域分析,一定会用到FFT。做FFT之前又会用到窗函数。那么各种窗函数之…

FIR滤波器窗函数设计法——汉明窗设计实例

文章目录 前言一、FIR滤波器的设计方法1 窗函数设计法的原理2 窗函数的主要指标和设计方法3 汉明窗的特性和设计方法 二、汉明窗设计滤波器实例1.低通滤波器matlab示例2.高通滤波器matlab示例3.多通带滤波器matlab示例 前言 数字滤波器按单位抽样响应的时间特性可分为无限长单…

图像处理算法:最大类间方差法

转载于:https://www.cnblogs.com/abella/p/10646792.html

CV笔记5:图像分割之最大类间方差法、自适应阈值分割(基于python-opencv实现)

目录 一、简介 二、最大类间方差法(大津法) 2.1 最大类间方差法原理 2.2 基于opencv的实现(简单阈值分割、Otsu阈值分割) 三、自适应阈值分割 参考 一、简介 图像阈值化分割是一种传统的最常用的图像分割方法,因…

图像处理之:最大类间方差法法进行图像二值化处理

方法简介: gω0ω1(μ0-μ1)^2 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0; 背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1,类间方差记为g。采用遍历的方法得到使类间方差最大的阈值T int…

学习笔记———《最大类间方差法》

最大类间方差法是由日本学者大津(N.Otsu)于1979年提出的,又叫大津法,简称Otsu法,是一种自适应的阈值确定的方法。 它的基本思想是以某一灰度值(如t)为阈值,将图像中的像素分成两类C0和C1,然后计算它们的方差&#xff0…

自动选择阈值--最大类间方差法(OTSU)原理及matlab实现

原理 基本思想: 把一幅图像分成两部分C0,C1.使前景和背景与平均灰度的差别最大。这种差异用方差sigmaB表示。 所以目标就是求最大方差sigmaB对应的阈值T。 matlab代码 clc clear ximread(rice.png); ax;subplot(211); imshow(a,[]); %[count x]imhist(…