程序员的自我修养 -- 读书摘记

这篇文章完全是从我个人角度对原书我认为值得摘记的地方进行整理;
我是在微信读书看完的这本书,其中下面有一条评论是 :
“把大多数程序员都懂的道理和了解的东西写成一本书,我还竟然看完了”
从某些角度看确实是这样,但是我感觉这本书还是非常值得一读的,整理的还是不错的。道理人人都懂,但是做到的并不多,就像“吸烟有害健康”;自我感觉看完后还是有收获的;
博文后面有不少关于少儿编程教育的,我个人对这方面极其感兴趣,所以篇幅长了点,不感兴趣的可以跳过这一节。

◆ 第一章 谈职业生涯

◆ 一、写给年轻程序员的10点启示

  • 正确地认识自己
  • 比一般人更加努力
  • 适时建立个人权威
  • 遵循最佳实践
  • 保持好奇心并乐于探索新的事物
  • 抛开代码与人沟通
  • 要为优秀的人工作
  • 生活、睡眠、旅行
  • 相信自己的天赋和创造力

◆ 二、那些程序员们后知后觉的职涯经验
1.你的薪酬与工作量无关
你的薪酬其实取决于很多因素,技术能力、经验资历、工作量等,但最本质的却是,你对公司是否重要,换句话说你是否容易被取代。
2.尽可能持续做一件事
技术深度及完整项目经验的重要性
参与10个项目,不如完整参与一个项目。持续做一件事是要你把每一件事做透、做好
3.唯一不变的就是变化本身
成为一个领域的专家一定要花费10000小时以上的时间,而对于程序员来说,所谓的100小时定律同样重要——花100小时学习或修炼一门新的技术,往往就能超过一般人很多。你需要提升自己快速学习的能力,当你学得越多,往往就能够学得越快,因为知识之间总是存在关联性。慢慢地,你会发现自己能够非常从容地面对那些不断出现的变化,甚至可以提前预判趋势,当机会来临时,总能成为那个有准备的人。
4.你的声誉非常重要
严谨
5.理解沟通的意义
6.你的右脑将是你成功的关键
谈到那些我们眼中非常成功的技术大牛、IT高管,都会出人意料地将一些非技术能力作为自己获得成功的关键。比如,编写文档或做PPT的能力、演讲的能力、说服他人的能力,等等。
右脑将会是决定你能否成功的关键。
既可以用左脑来想出那些技术方案,也可以用右脑来为用户提供更人性化和具备良好用户体验的设计方案。
在工作中你就可以找到很多途径来提升你运用右脑的能力。比如,在你编写一个文档或PPT时,除了内容之外,能否再多考虑一下字体和排版,让人读起来更加舒服呢?在你与用户讨论需求时,能否尝试着从程序员思维转换到用户的角度来看待问题呢?在团队内部开会时,是否能提前做些准备,多争取在大家面前进行讲演的机会呢?当你持续这么去做以后,你会发现自己在各个方面都会变得越来越好,这其中也包括了你的编程能力。因为,这些技能总是在你看不见的地方互相作用和促进的。
7.不要轻易说简单或不可能
8.你不应该总是单打独斗
不要总是单打独斗,要学会在团队中协作,并尽可能让优秀的人围绕在你身边,这将扩展你的能力范围,让你变得更加强大。
9.你的能力显而易见
程序员的能力来自于大量的编码实践,以及持续学习的能力和勤于思考的习惯。任何自作聪明,不懂装懂,以及投机取巧在明眼人看来都只会是东施效颦,显得如此微不足道。

◆ 三、如何招到一名靠谱的程序员
1.简历看人
阅读简历永远是面试的第一步。好的简历一定是正确、清晰并且能够体现候选人最有价值一面的。我首先会过滤掉那些包含错别字,文句不通或没有逻辑性的简历,因为如果一名程序员连自己的简历都不愿意去仔细检查并完善的话,很难想象他写出来的代码质量会如何。
接着,我会重点阅读简历中的项目经验部分,在这里我能够看到面试者的开发经验,技能栈,并且判断他们熟悉的技术框架、工具是否与目前公司的要求相匹配。
你需要用尽可能简练的文字来描述项目的背景,你在项目中承担的角色、参与项目的时长,你用到的技术,以及你在项目中的亮点等信息。优秀的程序员们往往善于归纳,并能够一针见血地发现问题或把一个问题说清楚。
如果你要成为一个领域的专家,那你必须花费超过10000小时,而这光靠工作时间是远远不够的。
2.给面试者10分钟介绍自己最擅长的
这个人对他所做的事情是否充满激情。
他是否能在自己的团队中有效地进行沟通。
他是否在自己的专业领域足够擅长。
你的团队是否会乐于和这个人一起工作。
3.基础打牢了吗?
4.技术深度够吗?
一些人会将最基本的代码语法或关键字写错。
5.选择适合所在企业文化的人
6.行为面试法
请谈谈你在这个项目中遇到的最大困难或挑战是什么,你是如何解决的。
7.给他们一个虚拟任务

◆ 四、每个程序员都应该了解的一件事
这些普通人眼中的大神们很少会提及自己的技术有多牛,反而更多地把功劳归于那些看似与技术毫无关系的能力。
其实在我看来,他们所谓的这些秘籍,都可以归纳为一种能力,那就是自我营销。只有具备了这个能力,你才能脱颖而出获得成功,这一点对程序员同样适用。
你写的代码可能毫无用处,直到:
人们理解你在做什么。
人们对你所做的事情感兴趣。
人们为你所做的感到兴奋和激动。

1.读与技术无关的书
2.会写文档
文档可能是你完成代码编写后一个最佳的展示机会。当代码实现了它的功能之后,就很少有人会再去看它,除非它出错了。但文档被阅读的概率却大得多。从一个文档中,我们可以看到关于作者的很多东西,思路是否缜密,逻辑性是否强,设计方案是否优秀,等等。可以说,文档质量的高低是衡量一名程序员是否优秀的重要标准之一。即使你离开了公司,你所写的文档很可能还会保留很长时间,被很多后来者阅读,而你的声誉也是在这一次次的阅读中构建的。
优秀的文档能够让人们对你产生信任和好感,相反,质量差的文档则会使你的声誉受损。
3.学会包装
说到包装,人们往往会产生一种不好的感觉,把它与虚伪、假的东西联系在一起。其实,我所说的包装应该包含两层意思:
•知道什么是美的(优秀的)。
•精心制作。
4.尝试多讲
敢说,让说的和你想的一致。
5.建立社会化联系
通过这些社会化的活动能够使你的想法和技能更加完善。
能够使你建立权威,你的技术博客,在一些社区上的技术问题解答,以及你的开源项目等都会使人认为你是这方面的专家。
同样,你也可以获得他人的帮助,来解决棘手的难题。
你可以找到与你有相同兴趣的人,一起做有趣的事情。
你的社交网络将因此扩大,这意味着你所获得的机会将会更多。
这样一个时代,程序员是一个充满可能性的职业,你可能成为下一个马云,甚至可能是乔布斯(马云和乔布斯都有一个共同点,那就是他们很早就掌握了自我营销的能力)。如果,你并不想仅仅是一名程序员,那么你只需要在潜意识中埋下一颗“自我营销”的种子,让它跟随着你慢慢成长,相信我,你的未来将会因此产生很大的不同。

◆ 六、提给年轻程序员的职涯建议
现代社会要求的是T型人才,也就是有一技之长,又能有其他相关技能。

◆ 第二章 谈实践与认知

真正优秀的程序员在与用户进行沟通时,总是试图去理解用户所提出需求背后的真正原因,因为他们知道用户往往会按照自己对问题的理解去给出他们认为正确的方案,而很多情况下,他们所给出的并不是正确或是最优的。那些优秀的程序员会站在用户的角度,认清问题,并像专家一样给出他们认为最优的方案。
如果你每次提出的意见都被证明是正确的,那么不需要多久,你也会被大家认同为是一位真正的专家了。

◆ 全栈工程师如何快速构建一个Web应用
没有最好的架构,只有最合适的架构。
能够快速构建出一个Web应用或APP是全栈工程师的核心竞争力,这也是为什么那么多初创公司都在寻找全栈工程师的原因。

◆ 如何成为一名优秀的全栈工程师
对于将持续学习作为一种生活习惯的人来说,学习新东西并不会成为一种负担,反而是一种乐趣。

◆ 我无法写出易读的代码
因为代码并不是自然语言,它本来就是难以阅读的,况且代码是否易读不仅与代码本身有关,还与阅读代码的人对系统的理解程度,以及他们自身的技术水平有关。
如何让你的代码更易阅读
推行模式(Patterns)而非建立规范:在项目进入开发阶段前,就将那些开发过程中会遇到的相同类型的问题进行分类,并为它们创建统一的模式(标准的处理方式)
深入理解并尊重你所使用的应用框架
不要使用过多的所谓技巧
Design Review与Code Reivew都很重要
让你的架构师忙起来:架构师应该承担起应用架构、代码规范制定、系统接口定义、技术风险识别、指导团队开发等很多工作。
小比大好:当一段逻辑变得比较长时,就将它拿出来,起一个与这段代码功能相对应的名字,封装成一个新的方法。,这听起来显而易见,但我告诉你大部分程序员并不会那么做,因为他们似乎遵循着另一个原则:只有当一段逻辑会被多次调用(大于等于两次)时,才为它创建一个新的方法。

◆ 第三章 谈个人发展

◆ 那些优秀程序员身上的共同特质
1.至少深入理解一门编程语言
•掌握这门语言的使用哲学:包括那些最佳实践、设计模式及它们背后所蕴含的原则。
•深入理解语言的特性
•了解语言的局限
2.看上去有些“傻”
•不会停止学习的脚步
•使得他们在工作中变得更加严谨
3.他们都是现实主义者
•优秀的程序员懂得平衡
•优秀的程序员也深知完成即是价值的道理,他们知道从来没有绝对的对与错
•优秀的程序员尊重流程,但会灵活应用。
4.从自己的失败中学习
5.很懒却又很高效
6.善于发现并改造轮子
7.并行工作,有效利用时间
8.具备不错的软技能
9.身边有一些优秀的伙伴
10.对生活充满热情

◆ 成为一名自由程序员
(1)Coding码市(https://mart.coding.net/)
(2)猪八戒网(http://www.zbj.com/)
(3)Freelancer(https://www.freelancer.com/work/)
(4)猿团(http://www.yuantuan.com/)

关于这一点我有些个人看法,并不鼓励长期把这种外快当做一种收入来源;
首先一点,我是绝对不会在公司写这种代码,就算很闲也不会,食人俸禄 忠人之事;
另一方面要思考这些外快是否值得投资,互联网行业加班相对比较严重,很多程序员难以在工作和生活找到平衡,自身的生活时间并不多,比如我每天下班到家基本10点多。自身需要充分的休息以保证身体健康,适当也需对自身进行投资,学学某项技术或者看看非技术书籍提高一下自身知识储备。
但是初入行的,需要项目历练的倒是可以考虑周末偶尔尝试下,或许颇有收获。或者还处于对money有刚需的情况,比如想尽快搞套房子,倒是可以多劳多得,这个只是个人观点,每个人还需要针对自身情况考虑。

◆ 未来,有关程序员的10个预言
1.程序员将变得更加全能:与技术相关的行业门槛都在不断降低,以及专业领域间正在不断地融合。
2.程序员将更具多样性
3.工具大爆发让程序员们效率倍增
4.云服务加速创新
5.程序员的职能进一步扩展:程序员们也需要能够掌控全局,而不仅仅局限于代码的编写。
6.程序员成为更多人的终身职业
7.自由程序员将大量出现:随着猿团、码市(Coding)、猪八戒等IT众包平台的不断成熟,以及远程办公条件的成熟,软件开发服务将越来越多地由自由程序员或他们组成的开发团队去完成,程序员的用人市场也将逐渐流向薪资水平总体偏低的二三线城市,自由程序员将会在那里大量出现,他们不再受到地域的限制,大部分人将在家办公。
8.程序员更加国际化
9.出现一些伟大的程序员
10.编程教学改变下一代:编程并不是教会一门开发语言那么简单,它让人们得到一种新的思维方式,而这种思维方式如果能在更小的年龄阶段掌握,会让孩子们在长大后能更好地适应未来的工作和生活。

◆ 第四章 谈编程中的教与学

◆ 推荐几本教孩子学编程的书
(1)《Scratch少儿趣味编程》
(2)《趣学JavaScript——教孩子学编程》
(3)《父与子的编程之旅:与小卡特一起学Python》

◆为什么我们不再购买技术类书籍
《精益创业》《增长黑客》《疯传》《游戏化思维》等,能够让我更贴近所处的这个时代,作为一个匠人设计和开发出更优秀的产品来。

◆ 我眼中的技术干货与湿货
我眼中的技术干货与湿货
年轻人喜欢干货,因为他们急切地渴望成长,那些所谓的技术干货就是他们眼中的高效助长剂。
大棚里的蔬果总有着漂亮的外形,但说到口味和营养,却仍是那些在自然环境下经过风吹日晒,在雨露滋养中生长的会更胜一筹。
程序员也是一样,一味追求干货以期获得快速的成长,只会让你如过度施肥的植物般,很快遇到瓶颈而失去持续成长的动力。
演讲:闲时我会看TED的演讲,除了技术相关的,我也看一些与人文艺术有关的演讲。从这些各个领域的人身上,我获得了很多灵感,也使我发现了不同的兴趣。除了技术你还应该去发现不同的兴趣爱好,这会使你变得更好。

◆ 为什么你应该让你的孩子尽早学习编程
大部分的家长可能都会让自己的孩子至少学习乐器、运动或棋类中的一项甚至几项。但你有没有想过让你的孩子尽早(6~8岁)开始学习编程呢?相信很多家长都会有这样的疑惑:为什么要让那么小的孩子学习编程呢?编程对孩子有些什么好处?如果孩子连数学、语文、英语这些基础都没掌握好,他们能学好编程吗?我暂且不谈我的观点,而是试着让你了解那些你可能更信任的人是怎么说的:

编程应当与ABC字母表和颜色同时得到教学,所有人都应该更早地学习如何编程。——美国前总统 奥巴马
人人都应该学习一种计算机语言,因为它将教会你如何思考。——苹果创始人 乔布斯
人工智能将取代所有简单重复脑力劳动。——百度CEO 李彦宏
未来20年,美国可能被机器人取代的职位比例为47%,英国为35%。——牛津大学研究报告
富士康正在实施百万机器人计划,替代目前大量使用的一线工人。——富士康总裁 郭台铭

比尔·盖茨和扎克伯格等一些科技大佬们更是直接通过在线视频教授孩子学习编程。这些各个领域最优秀的人物为什么会不约而同地认识到编程对于孩子甚至每个人的重要性呢?我想,或许是因为他们比我们大多数人都更早地意识到了社会正在经历的变革及它的发展方向。

◆ 为什么应该让你的孩子尽早学习编程呢?
1.学习编程能让孩子们变得更好
孩子们通过编程制作出了包含家人照片的简单网页,他们觉得这是一件很酷的事情,朋友们看到后都很羡慕他们的这个新技能,孩子们变得比以前更加开放,更有自信了。
•通过一次次的动手开发,我看到孩子们变得更有耐心,也更有专注力了。而更重要的是在这个过程中,他们会尝试着去自己解决遇到的问题。
•在完成我布置的一个个任务之后,孩子们往往会自己想着用掌握的这些很基础的编程技巧,去实现他们想象的更复杂的东西。他们将自己的创意通过编程转化为了现实。
•更多好的想法,随着他们编程技能的增长不断地被激发出来。你会发现他们的好奇心和求知欲都变得比以前更强了。
2.学习编程非常简单而且快乐
若不是从小玩游戏,我绝不会学编程。——Facebook CEO 扎克伯格
•教孩子编程的培训机构相对较少,并且费用往往很高。
•我们都不会编程,所以很难去指导孩子,以及衡量孩子是否学得好。
3.对学校教育有很好的促进作用
国内的学校对孩子基础课程的教育都是非常重视的,比如,语文、数学、英语这些,有些更是走在了世界的前面,但在另一些我认为非常重要的方面缺乏足够的重视,比如,美学教育(Art and Design),计算机教育(Computer Science)。下面这张图显示英国要求5岁以上的孩子必须学习电脑编程。
对国内的孩子来说,我也建议尽可能早地开始学习编程。只要他们已经具备了比较好的语言表达和理解能力,以及一些最基本的逻辑思维能力作为基础就可以开始学习编程了。和学习语言一样,学习编程也是越早越好。通过学习编程,能够非常有效地拓展孩子的思维,你会发现孩子思维的逻辑性与延展性变得比之前更好了。另外,他们也会自己创造出一种更好的学习和处理问题的方法,这对阅读、算术、写作等几乎所有学科都会产生很好的促进作用。
4.更好地适应未来的科技社会
今天的许多职业都将会因科技的进步而渐渐消失,但同时会有更多新兴的职业产生,而它们中的大部分可能都需要具备编程能力,这可能也是有人预测程序员可能是未来最后一个被人工智能所取代的职业的原因。
总之,我相信编程已不仅是信息行业对人才的需求,而且将成为所有行业的需求。尽早让孩子们学习编程,能够让他们更好地适应未来的科技社会,并在未来具备更强的竞争力。

◆ 学习编程从“玩”开始
有很多编程书,虽然名字是教孩子编程,但往往一上来就会介绍编程语言,以及它们的语法等,好像学编程就是学一种编程语言一样。然而,对于孩子来说,这种做法其实并不可取。编程与我们今天做的很多创造性工作非常类似,对于学习编程来说,更重要的是学习这样一种思维方式。因此,我们应该首先站在更抽象和宏观的角度来向孩子介绍编程,并同样以孩子特有的发散思维来加以引导,而不应过早将它与具体的某一种编程语言联系起来,这样反而会限制学习者的思维,降低孩子们的学习热情和兴趣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章