前面主要内容是我转载的《程序员的自我修养》这本书中的内容,后面有一点自己的感悟,欢迎阅读。
1.既然学习命令行对于程序员来说那么重要,我们又应该如何学习呢?对于初学者来说,你根本不需要去看那些书,因为它们大部分是为系统管理员写的。而对于一名普通程序员,你只需要从熟悉那些最常用的基本命令开始,比如,ls、cd、pwd、cp等,反复尝试,你很快会习惯使用它们,然后就可以更进一步,去写一些自动化脚本来帮助你完成一些工作;
2.我无法写出易读的代码;因为代码并不是自然语言,它本来就是难以阅读的,况且代码是否易读不仅与代码本身有关,还与阅读代码的人对系统的理解程度,以及他们自身的技术水平有关;我很喜欢拿写作与写代码进行比较,当我们写完一篇文章后,我们常常会反复修改,直到它变得流畅易读为止,因为只有这样,读者才能明白你的文章所要表达的内容。但对于编码而言却不是这样,我们写代码是为了实现功能、解决问题,因此我们一般都会通过测试来进行验证,但极少会为了让它变得易读,而去修改它。与代码的准确性相比,显然代码是否易读就变得次要很多。
3.编程的意义在何处?回想大学毕业刚成为一名程序员时,自己对技术是如此狂热,我不断地购买各类技术书籍,几乎所有的业余时间也都用来钻研技术,提高自己的编程能力。技术之外,我更需要能够突破程序员思维,去发现用户需求背后所隐含的真正问题。
4.至少深入理解一门编程语言,编程也是一样,当程序员们做出那些优秀的程序设计时,看似自然,但它的背后却是程序设计者们经过长时间编程实践之后所构建起来的编程思维。优秀的程序员不仅熟练掌握一门编程语言的语法和语义,他们还会掌握这门语言的使用哲学:包括那些最佳实践、设计模式及它们背后所蕴含的原则。
5.如果你希望变得更加优秀,那你必须具备直面失败的勇气,并学会从每一次失败中获得进步。不要停止学习的脚步:认为自己不够聪明才会通过不断学习去提高自己。而一旦你停止了学习的脚步,你将无法得到那些能够让你变得更加优秀的方法和技能;与其长时间关在会议室里,去讨论或设想产品,倒不如尝试用较小的代价去实现出某一个功能或产品,然后通过用户的实际使用去证明它,继而在反复的迭代中不断完善。
6.优秀的程序员知道如何找到他们想要的轮子,主要体现在以下几个方面:第一,他们会用几个与待解决问题相关的关键字在互联网上进行搜索,借助Google、Baidu、Bing等国内外搜索引擎,但很多解决方法、意见、建议往往会出现在国外的技术论坛中。第二,他们会利用社交网络进行搜索,因为那里往往包含着最新的信息,相比传统互联网搜索,你往往会得到那些更具时效性的解答。善于提问,互联网上很少有人认识你,所以你完全不必害羞,在Stack Overflow等社群里提出你的问题,你很快就会获得热心人的回复。当然对任何回复都保持友好和善意也很重要,否则没人会愿意帮助你。优秀的程序员往往能通过阅读相关的文档、API及代码,快速地判断一种技术、框架、工具是否适合自己的需要,并且凭借扎实的技术功力,他们还能基于这些轮子,改造出更强大、更适合自己需要的轮子。如果使一个程序员走向平庸,最直接的便是失去对编程的热情和兴趣;
7.专家与普通人的区别在于觉察力,编程与艺术很相似,一件艺术作品的好坏在很大程度上取决于创造者的灵感和构思,然后以纯熟的绘画、雕塑、建筑等技巧加以表现;然而,编程与艺术间又存在着天壤之别,艺术的目的在于给人带来美的感受或情感上的共鸣,而编程则是为了解决实际问题;艺术更需要极高的天赋,而编程却是一项通过努力人人可以习得的普通技能。
从阅读一本书,写一段代码,做一次讲演,写一篇博客到旅游、烹饪等,善于思考的人总能从中获得更多的启发和灵感,这也使得他们能在工作中轻而易举地发现那些最优的解决方案,而不是像普通人那样绞尽脑汁却始终不得要领,久而久之他们便自然而然地成为了大家眼中的专家。
8.程序员创业?你不应该被一时的热情冲昏头脑,应尝试着问问自己,既然我的这个想法那么好,那么为什么在那个行业或领域)里没有人想着去做呢?是因为这个行业里没有一个人比我聪明?还是因为我想要解决的问题并非是市场的真正痛点,或者是因为实现它的成本过高,根本没有人愿意去做呢?尝试着去做更深入的市场调研,然后再决定是否开始。所建议的初创团队可以在2~5人,其中至少应该有一名程序员、一名设计师、一名市场人员、一名投资者或决策者。
9.提高程序员的审美;学习文学、音乐、绘画等,都是你可以从中获得美感的来源,而且任何一个门类都是如此浩瀚,足以让你取之不尽。没有人天生便会欣赏,对美的感受恰恰来自于不断累积的审美经验之中。程序员们常年从事着编程工作,这使他们往往变得过于理性,这虽然能够帮助他们更好地胜任工作,却也在削弱他们对周围事物的感知能力及原本丰富的情感。
10.建立自己的个人品牌;
在与他们的交流中,我渐渐发现他们中的大多人都性格鲜明、乐于表现、更加开放,还有一点便是相较于程序员,他们往往会更注重建立自己的个人品牌。建立自己个人品牌的初期可以写技术博客:在创建个人品牌的初期,很少有人会关注你,写一个技术博客会是不错的选择。写技术博客有不少技巧,但最重要的还是坚持与用心去写。坚持每周写一篇经过自己用心思考后的文章,并在相对固定的时间发布,渐渐地,你会发现读者自然而然地多了,他们还会给你的文章提出意见,有时还会向你咨询问题,请认真对待这些反馈,它们会帮助你补充思考中的遗漏,让你变得更加完善。渐渐地你将能够写出更优秀的文章来。
11.通过写出优秀的技术博客,可以让我们拥有相当规模的读者群:程序员在简书中是一个很大的读者群体,这意味着我写的文章如果足够好的话(能够上首页),便有机会被更多人读到。你应该积极地对待读者的反馈,对于那些赞扬的评论,道一声谢谢,对于那些批评的声音,更应该理性对待,反思和改进。只要你坚持这么做,你就会发现自己与读者之间会逐渐建立起更强的联系,而读者的数量也会随之越来越多。
12.程序员也是一样,一味追求干货以期获得快速的成长,只会让你如过度施肥的植物般,很快遇到瓶颈而失去持续成长的动力。湿货在我眼中就像阳光和雨露,它们可能来自于那些大师、专家或者像你我这样普通人的经验、感悟或方法,或许看上去并不能直接带给你什么,但在这些湿货的滋养下,你却能在无声无息之中提升自己的思维、觉察力、感悟力,而这些正是帮助你去消化那些干货的有效润滑剂。
13.写作与写代码的区别
我们写代码的目的都是相似的,那就是去解决某一个或者一类问题。写作的目的则宽泛得多,它可以用来叙事,用来说明,用来议论,用来描写,更可以用来抒情。相对写代码而言,写作的目的是如此丰富,这也正是它吸引我的原因。
14.拥有工匠精神,所做的每一件事情,它的背后都可以和艺术联系在一起。只要是付出了努力,精心制作,并能反映出作者情感与灵魂的东西都可以称为艺术品。想一想你平时喜欢做的事情,阅读、散步、享用美食或者看展览。这其中的每一件都与一种艺术形式相关联:写作、环球旅行、烹饪、摄影。你会发现当你不断完善某一项技能的同时,其他技能也会得到加强。
15.怎么寻找设计灵感?
从早上醒来直到晚上进入梦乡的这一天时间里,你会从很多不同的渠道接收大量信息,你需要学会从这些信息(可能是一篇优秀的文章、一本好书、一个优秀的设计、一次精彩的演讲等)中去吸收最优秀的部分,它们将是你日后产生灵感的来源。无论你是写一段代码、做一个UI、写一篇博客文章甚至是做一顿晚餐,它们的背后都包含着艺术。动手制作是一件非常奇妙的事情,你实践得越多,就越会发现它们之间其实是相通的。
16.如何安排时间?我最早是一名程序员,后来自学了设计,现在又开始写技术博客。编程、设计、写作这三件看上去并不那么相关的事情,却能够互相影响,彼此促进。另外,保持持续及合理的时间分配也很重要。每天,我阅读和收集的时间大致占20%,另外,我会花20%的时间写作或记录心得,其余50%的时间用来制作(编程或设计)。动手制作本质上是对自己内在的一种表达。当你的技艺越来越纯熟时,你将能够把作品与自己的情感更深地结合在一起,这个时候,你就完成了一件具有灵魂的高水准作品,这可能也正是我们这些匠人所不断追求的吧……
一点自己的小小的感悟:
《程序员的自我修养》这本书的作者的思想给了我很大启发,让我的思想更加Open,之前都以为程序员就是码农,程序机器,现在我深刻领悟到程序员是一个多么伟大的职业,你可以用你的思想在代码间飞舞,做出非常优秀的产品,然后被用户使用,想想就是一件非常棒的事情;向推动祖国信息化产业发展的程序员们致敬,正是你们无数日日夜夜的伟大创作,使得中国的IT事业蓬勃健康发展,但愿我国拥有自己的操作系统,芯片,中国在核心技术上不再受制于人,到那时,我坚信,中国离中华民族的伟大复兴也就不远了,期盼这一天早日到来,不说了,奋斗吧,少年!