编程教会我的6个生活信条
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了,其实学会提问和搜索才是你编程生涯的开始。
说到学会提问和搜索,有些人会疑惑这也要学嘛?
那是当然,会提问题代表你知道自己不懂什么,并且能准确的描述出来,会搜索代表你知道在哪找答案,并且能识别答案的真伪。
愚者困惑,智者提问。对每一个人都是真理。
END
相关文章
- Ulysses for Mac(最好用的Markdown文本编辑写作工具)
- Xilinx MPSoC FSBL中的看门狗的用法总结
- 【FusionCompute】使用VMware Workstaion安装部署VRM(三)
- 【FusionCompute】添加CNA主机到VRM管理节点(四)
- RabbitMQ:安装配置
- RabbitMQ:消息模型
- 【FusionCompute】基于FreeNAS部署并使用虚拟存储(五)
- 【FusionCompute】创建虚拟机失败(六)
- Xshell同步复制粘贴Windows的东西
- 【OpenFiler】使用虚拟机安装openfiler
- 什么是BPM系统?BPM流程管理系统介绍
- Online DDL和Cardinality
- MRR和ICP
- 犀牛鸟中学科学人才培养计划喜报:祝贺北京一零一中学李一昕同学获丘成桐中学科学奖全球总决赛金奖!
- 耗时减半?腾讯云OCR只做了3件事
- 开箱即用区块链是一种什么体验?Lighthouse长安链给你答案
- 活动回顾 | 基于信任基础设施实现数据要素可信流通
- 【openfilier】配置iSCSI存储
- 【VMware vSphere 7】虚拟化概述(一)
- 【VMware vSphere 7】安装配置ESXi 7主机(二)