1、不要等准备好了再出发,优秀的程序员都是“探路者”
我见过不少程序员不敢尝试新技术,空有好的idea却从不去实施。他们不是懒,而是“完美主义”,永远解释自己能力不够、没想好、准备中...
编程的经历让我发现,只要你开始疯狂敲代码,会不断蹦出新点子,很多问题也会迎刃而解。因为编程的过程中,你会不自觉地去思考逻辑、检索资料、咨询大佬、反复纠错校验,最后发现做出来的东西居然有模有样。
一旦你想法太多,始终在起跑线上观望,会陷入“完美主义”的陷阱,久而久之就成了拖延症晚期。拿学Python来说,其实语法并不难,但很多人死在了安装Python软件上,觉得各种麻烦、复杂,怀疑自己搞不定。也就一直处于“我对Python念念不已,Python对我爱答不理”的状态。
《黑客与与画家》书里说:你把整个程序想清楚的时间点,应该在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
相信程序员都会有体验,你不可能每个功能都完美设计好,才开始写代码。
电影《饮食男女》也讲到:人生不像做菜,不能等一切都准备好了才下锅。
确实这么个道理。
2、很多事都是孰能生巧,没有足够多练习不要提天赋
编程应该是最能体验prctice make perfect的技能之一,在前期积累的阶段,往往要大量的去刷题、比赛、模仿,才能显得游刃有余。
资深码农就像是老师傅,哪个不是键盘敲到发白。
可能练习不一定会让你完美,但大量的练习会让你产生髓磷脂,一种神经元外侧的脂质,能让你的脑回路更加灵活。
人的大脑可以分为反射、思考、记忆三个功能,大脑可以通过大量的反复练习让思考演变成习惯,最后跳过思考只需要反射的指令操控就能完成,从而达到“生巧”的效果。
当然作为程序员,练习不是一味的重复,或者去完全复刻别人的代码,每一次练习都应该增加难度,有突破自己认知的成长。这样经过反复的输入、评估、输出、纠正,你会有惊人的变化。
当然练习不光是程序员需要做的事,几乎任何能力的修炼都离不开反复练习。
3、要有良好的习惯,才能事半功倍
编程是一项系统工程,就和写小说、建大厦一样,所以需要有模式、规矩、条理,才能不至于变成“屎山”。建议大家在写一个程序之前,可以用脑图软件理一下思路,也可以用伪代码提炼核心逻辑。
还有比如说规范代码命名、规范注释、模块化、版本控制、注意备份等等,都是需要养成的好习惯。
我非常喜欢Python编程的理念,尽量写符合Python习惯的代码,它在Python之禅里解释道:
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
写代码需要好习惯,对个人学习、工作来说更需要。
你看看高中班里那些拔尖考名校的同学,基本都是上课认真听、考试不粗心,在同一个班里智商差异不明显的前提下,拉开差距的都是学习习惯。
我一个前同事,有个习惯非常让我佩服,他每次演讲PPT前,都要花一两天时间给每一页做备注,然后写演讲稿,在家不断练习。
这其实是一种习惯的养成,既然他在演讲PPT上这般用心,其他工作必然不会差。
4、最简单的往往是最有效的
很多人喜欢把简单的事复杂化,比如说一个线性回归能解决的事,非要用神经网络,浪费大量机器资源,跑出来的效果也不好。其实在编程领域,往往简单胜于复杂。
Python提倡一个函数只做一件事,一件事只有最好的一种解决方法,这其实就是把复杂问题简单化。
当然这里的简单不是幼稚、容易,而是最优解法,并且尽可能让更多人看懂。
5、愚者困惑,智者提问
如果你是程序员,会发现有大量的技术网站和博客,比如stackoverflow、csdn、博客园、github、掘金等等,似乎程序员比其他行业更需要交流和分享。
编程教给我最好的学习方法就是提问和搜索,遇到bug我可以百度、谷歌,肯定有现成的答案等着你,因为你遇到的难题前人基本都遇到过,并且绝大多数都给出了答案。
所以对一个初学代码的新手来说,千万不要买本书、看门课就ok了,其实学会提问和搜索才是你编程生涯的开始。
说到学会提问和搜索,有些人会疑惑这也要学嘛?
那是当然,会提问题代表你知道自己不懂什么,并且能准确的描述出来,会搜索代表你知道在哪找答案,并且能识别答案的真伪。
愚者困惑,智者提问。对每一个人都是真理。