前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员的自我修养5️⃣—不至于代码

程序员的自我修养5️⃣—不至于代码

作者头像
马拉松程序员
发布2022-04-26 18:46:44
3500
发布2022-04-26 18:46:44
举报
文章被收录于专栏:马拉松程序员的专栏

这是程序员的自我修养的最后一篇,主要内容是写一写代码之外的内容。陈逸鹤老之前写过一本书就叫《程序员的自我修养》,(网上有电子版),本文主要是结合书中的内容和我自己的看法,更像是一篇读书笔记,多数观点来自上面书中。 编者按

写给入行程序员的10点启示

1.正确地认识自己

相比码农、程序猿、软件工程师、张江男、屌丝程序员等等这些网络词汇,当你把自己看作是一个屌丝程序员的话,那你也可能就是那个衣食不愁,但整天浑浑噩噩、无所追求的屌丝。我更愿意用技匠这个词来形容程序员,就像我给自己起的花名一样。

程序员应该是那些不断追求更高技术,并有着自己产品梦的工匠。当你通过对自己技术不断打磨,一次又一次做出那些优秀产品的时候,你会发现自己不再是他人口中的码农或是屌丝,而更多被称为了大师、大神,而受到大家的尊重。

2. 比一般人更加努力

优秀的程序员往往会被同天才或高智商的人联系在一起,但我想告诉你,你周围所看到的那些天才(身边的优秀程序员)只是在你没看到的时候花了更多时间工作或者学习而已,当你也坚持这么做时,你也会变得和他们一样优秀。

3. 适时建立个人权威

建立个人权威,这能让其他人看到你的不同之处,并为你在公司或团队内部构建起良好的影响力。当然,这一切的前提是你通过不断努力积累了自己的实力,并在恰当的时候去展现它。

4. 遵循最佳实践

技术更新太快,作为程序员,如何才能适应这种变化呢?其实,就像每年都会有新的流行设计趋势,然而设计的本质和原则却始终不变一样。这些最佳实践或由此衍生出来的框架、工具都是那些富有经验的程序员通过大量实践,总结出来的最优秀的软件开发思想。通过理解和对它们的有效实践,能够让你站到前人的肩膀之上,对软件开发本身获得更深入的理解和认识。

5. 保持好奇心并乐于探索新的事物

优秀的程序员们也往往非常乐于探索那些看似与工作无关的技术。比如,做后端的程序员去学习前端的技能,前端工程师则去学习UI设计,等等,这些虽不会让他们成为那一个领域的专家,但技术往往是相通的,当你在探索这些新鲜事物的同时,你会发现你原有的技能也得到了提升。

6. 抛开代码与人沟通

“紧盯着电脑屏幕,不断敲击键盘,目光有些呆滞。”这可能是程序员给人的印象。而我所看到的那些优秀的程序员却都不是这样的,他们往往兴趣广泛,并且都乐于与人沟通交流。程序员们很容易会忽视与人的沟通,这其实对他们的职业生涯发展是不利的。

我很支持那些年轻的程序员们坚持去走技术路线,但这不应该成为你排斥与人沟通的理由。你需要与人沟通来获得他人的帮助;你需要与人沟通来建立良好的工作关系;当你的能力不断提升,被赋予更多职责时,你更需要与人沟通来管理好自己的团队,以及与老板或客户进行有效的沟通等。

7. 要为优秀的人工作

环境对一个人的影响是巨大的,而最可怕的是当你身处其中时,很难意识到你正在变得越来越糟。我之前带过一些不错的程序员,他们中的一些人去了一些整体氛围或环境不是太好的公司。

过了一段时间后,再次与他们碰面聊天时,我发现他们的思维、观点相较之前并没有提升,有些甚至反而退步了。

8. 生活、睡眠、旅行

我希望每个程序员都能明白工作、技术、写代码这些并不是你存在的意义,而生活才是,你需要懂得生活,并且学会生活。

生活:尝试有节制和有规律的生活,程序员生涯绝不是一次冲刺,而更像一场马拉松。

睡眠:很多人觉得睡眠是弱者的表现,他们往往会长时间熬夜,其实我觉得这是这一种恶性循环,反而会使你的工作效率变的更低。

旅行:去任何一个新的地方都可以称之为旅行,让你发现和感受新的东西,而这些是从电脑屏幕上无法获得的。

9. 相信自己的天赋和创造力

每个人的身上都有属于他自己的天赋和创造力,但它们也绝不是与生俱来的,你需要在生活中不断地培养和发掘它们。下面是我觉得一些行之有效的方法。

阅读优秀的书籍:好的想法绝不是凭空产生的,尝试从书中寻找那些能激发你创意和灵感的优秀内容。

记录和收集:尝试用一个小本子,将你转瞬即逝的好想法记录下来,它们可能并不直接有效,但下一个更好的想法可能就是从这些你记录下来的想法中产生的。

尝试动手:光有好的想法是不够的,你需要成为一个有工匠精神的人,通过亲自动手去尝试和实践,你会不断从中得到新的创造力。

10. 如果上面提到的其他建议都对你无效,那么就请坚持第2点吧,因为它将成为你最大的竞争优势。

那些程序员们后知后觉的职涯经验

1. 你的薪酬与工作量无关

换句话说你是否容易被取代。公司很容易找到一个和你差不多的应届毕业生,而那些对公司产品非常熟悉,并且起到关键作用的老员工,要想替代他们,公司所需要付出的代价及需要承担的风险就会高得多。所以,不妨摆正心态,正确认识到自己在公司中的位置,努力修炼内功,让自己变得越来越重要,相信你的薪资也会随之提升的。

2. 尽可能持续做一件事

既然你对于公司的价值来自于你的不可替代性,那又该如何有效提升它呢?我的建议是尽可能持续做一件事。这既是指技术上的积累,也是指你能完整或较长时间参与同一个项目或开发一个产品。

技术深度及完整项目经验的重要性,如果你总是在跟随那些新出现的技术和框架,那你很难在某一项技术上达到理想的深度;同样,在一个公司里,如果你总是在更换项目,那你也很难提升自己的价值。

参与10个项目,不如完整参与一个项目。持续做一件事是要你把每一件事做透、做好,而不是蜻蜓点水,浅尝辄止。

3. 唯一不变的就是变化本身

作为程序员,我们又应该如何应对这些变化呢?我想说,你很难去改变所处的环境,或是阻挡那些变化的大趋势。你所能做的恰恰是培养自己持续学习的能力。

4. 你的声誉非常重要

除了那些经常挂在嘴边的诚实守信、踏实肯干等之外,有一点特别重要,那便是严谨。因为它往往是判断一名程序员是否具备优秀潜质的重要因素。严谨的程序员对于分配给自己的任务会认真理解,对于自己的产出会仔细检查,这些都能大大减少工作中的出错概率,给团队或公司中的其他人留下良好的印象。

5. 理解沟通的意义

当我们没有对问题有深入理解的时候,我们很难写出正确的程序来,因此我们需要向用户虚心求教,去真正理解他们所希望解决的问题。

6. 你的右脑将是你成功的关键

谈到那些我们眼中非常成功的技术大牛、IT高管,都会出人意料地将一些非技术能力作为自己获得成功的关键。比如,编写文档或做PPT的能力、演讲的能力、说服他人的能力,等等。我虽然并不完全赞同最优秀的程序员不写代码这种观点,但我确信你的右脑将会是决定你能否成功的关键。

7. 不要轻易说简单和不可能

年轻程序员们不应该轻易做出那些过于绝对的判断,应尽可能去使用科学的方法进行分析和论证,然后用不易被人误解的方式进行有效的表达,这样你提出的观点才能让大家感到信服。

8. 你不应该总是单打独斗

如果你真的希望做出一些具有影响力的东西,那么光靠个人是很难实现的。你需要和团队中不同角色的人进行合作,有时候你需要说服别人,有时候你则会被别人说服。

9. 让你的能力显而易见

那些优秀的程序员无时无刻不在体现他们的能力,从轻松地解决技术难题,到会议上提出被一致认可的解决方案,以及他们写出的那些优雅且完善的代码,这些都让他们显得与众不同,仿佛是天生的优秀程序员。但我想说,他们其实都是那些努力并使用了正确方法的人。

程序员的能力来自于大量的编码实践,以及持续学习的能力和勤于思考的习惯。任何自作聪明,不懂装懂,以及投机取巧在明眼人看来都只会是东施效颦,显得如此微不足道。

如何找到一个靠谱的工作

原文是从面试官的角度:如何招到一名靠谱的程序员。面试考察的方向就是我们求职应该是要做的部分,所有看看面试官是怎么选择人的。

1.简历看人

阅读简历永远是面试的第一步。好的简历一定是正确、清晰并且能够体现候选人最有价值一面的。我首先会过滤掉那些包含错别字,文句不通或没有逻辑性的简历,因为如果一名程序员连自己的简历都不愿意去仔细检查并完善的话,很难想象他写出来的代码质量会如何。

接着,我会重点阅读简历中的项目经验部分,在这里我能够看到面试者的开发经验,技能栈,并且判断他们熟悉的技术框架、工具是否与目前公司的要求相匹配。

简历是赢得一张面试门票的重要一环,关于程序员写简历的要点,我在之前写在 《程序员写简历的5个点

2.给面试者10分钟介绍自己最擅长的

我更愿意给面试者10分钟时间,让他介绍自己最擅长和最感兴趣的领域。这往往能帮助我很快做出下面的判断:

  • 这个人对他所做的事情是否充满激情。
  • 他是否能在自己的团队中有效地进行沟通。
  • 他是否在自己的专业领域足够擅长。
  • 你的团队是否会乐于和这个人一起工作。

这一招我在面试中用得很多,而实践证明也确实非常有效。

3. 基础打牢了吗

有经验的面试官往往能够通过几个最简单的技术问题,判断出面试者的技术基础是否牢固,这不是为了证明他有多优秀,而是用来判断他是否是一名合格的程序员。

下面是我经常会问的几个问题(Java):

  • HashTable与HashMap有什么区别?
  • Servlet是线程安全的吗?
  • JSP中@include跟jsp:include的区别(现在不用了)
  • HTTP的response code403和500分别代表什么?

这些问题都很简单,但一些基础不牢的程序员往往会在这个时候露馅。当然,根据面试岗位的不同,你还可以有针对性地问一些问题。比如,你需要找一个能写核心算法的程序员(比如,银行的总账计算,或者保险公司的保费计算),那么你可以问一些算法相关的问题。

4. 技术深度够吗

对于资深开发人员,还需要考察他们的设计能力。说到软件设计,大部分面试者都能熟练地背出面向对象的3个基本特性:继承、封装、多态,也能把它们的概念描述清楚。

5. 选择适合所在企业文化的人

我曾在具有鲜明文化差异的不同公司或团队工作,看到许多崇尚开放、开源的程序员在一个相对封闭,具有很多流程及规范限制的公司中很难发挥,最终选择离开。因此,在招聘程序员时,选择合适的往往比选择最优秀的更重要。

6. 行为面试法

一名程序员是否能够很好地工作,不仅取决于他能否顺利地完成开发任务,更重要的是在遇到一些特殊场景或问题时,他能否合理有效地处理和解决。

下面便是一个我经常用到的问题:

  • 请谈谈你在这个项目中遇到的最大困难或挑战是什么,你是如何解决的。

从面试者对上面这个问题的回答中,我能够很好地判断他是否有较强的独立解决问题的能力,而我认为这是除技术能力之外,程序员最应具备的能力。

每个程序员都应该了解的一件事

1. 读与技术无关的书

我建议只买一些经典的技术书籍来帮你打基础,然后从网上去学习一切新的东西。我尤其鼓励大家去读那些与技术无关的书籍。程序员不善于自我营销,其中一个重要原因是他们自身所掌握的知识体系太过于单一,很难跳出技术范畴与人交流,并引起别人的兴趣和认同。

你可以读任何历史、经济、人文、艺术类的书籍,它们都能够帮助你丰富自己的知识和思想,使你变得更加全面和完善,而这反过来,又能帮助你建立信心。

2. 会写文档

文档可能是你完成代码编写后一个最佳的展示机会。当代码实现了它的功能之后,就很少有人会再去看它,除非它出错了。但文档被阅读的概率却大得多。

从一个文档中,我们可以看到关于作者的很多东西,思路是否缜密,逻辑性是否强,设计方案是否优秀,等等。可以说,文档质量的高低是衡量一名程序员是否优秀的重要标准之一。

3. 学会包装

说到包装,人们往往会产生一种不好的感觉,把它与虚伪、假的东西联系在一起。其实,我所说的包装应该包含两层意思:

  • 知道什么是美的(优秀的)。
  • 精心制作。

作者举例一个普华永道的高级经理通过一个长达114页的非常精美的PPT而赢得了保监会关于偿付能力改革的会议。

在日常工作中,我经常发现身边的程序员很难写出美观整洁的文档或PPT来。这一方面与我们从小缺乏美学教育有关,而更重要的往往是他们并没有真正用心去制作它。

其实,我们可以通过寻找一些优秀的文档示例来学习如何制作优秀的文档,这其实并不困难。知道什么是优秀的,然后像写你的代码一样用心去制作就行了。

4. 尝试多讲

讲话一直是很多程序员的硬伤,当然这也曾是我的硬伤。根据我的经验,你需要跨过以下两个障碍:

  • 敢说。
  • 让说的和你想的一致。

5.建立社会化联系

一个完全封闭的程序员一定不是一个优秀的程序员。优秀的程序员往往愿意并善于与他人交流,分享自己的经验和想法,并在交流中获得有益的东西。这样做有很多好处:

  • 通过这些社会化的活动能够使你的想法和技能更加完善。
  • 能够使你建立权威,你的技术博客,在一些社区上的技术问题解答,以及你的开源项目等都会使人认为你是这方面的专家。
  • 同样,你也可以获得他人的帮助,来解决棘手的难题。
  • 你可以找到与你有相同兴趣的人,一起做有趣的事情。
  • 你的社交网络将因此扩大,这意味着你所获得的机会将会更多。

程序员的烦恼

1. 是否还应该留在一线城市

一切都能为你的生活赋予意义,并让你感到更加快乐的话,那你还是应该更坚定地留下,而非选择离开。

2. 小公司做的事情太繁杂了

时常会说“杂事不杂”,虽然看着被很多与技术无关的事务缠身,但它们对你来说同样具有意义。你从中可能获得沟通能力、管理能力、建立更广的人脉,在企业内部建立影响力,等等

3. 创业公司中的危机感

无论成功与否,经历一次完整的创业都将让你受益匪浅。你将学到很多在大公司仅仅做一颗螺丝钉所学不到的东西。虽然在此过程中,你一定会有挫败感、焦虑,但或许坚持一下就会看到曙光。

另外一点我想说的是,创业的过程将让你获得不同的眼光。创业大多是在一个新的领域中进行的,你不应仅仅专注于公司所使用的那些技术,而更需要通过深入理解这个新的领域,去获得不同的视角和眼光,因为它们也会在未来成为你的核心竞争力。

4. 技术单一,想学习更多

我总是很鼓励身边的程序员们去涉猎不同的技术甚至领域,但前提是你必须首先对某一门技术做到精通。技术是需要深耕的,深入学习一门主流的开发技术,并不断提升编程思维,比对很多技术栈都浅尝辄止要好很多。因此,如果精力有限不妨先学好一门技术,你会发现之后再去学习其他技术会变得容易许多,因为它们之间往往都是相通的。

5. 我想自学编程,应该学哪一门语言?

如果你真的没有任何思路,只是希望你学的这门编程语言能够有用,我的建议是JavaScript,因为它看起来是唯一可能在未来所有领域内得到应用的编程语言,从我们的移动设备,到传统的Web应用,再到服务器端开发甚至是硬件编程,它几乎无处不在。

6. 大专学历,能进大公司吗?

全日制本科几乎成了所有内部职位的最低要求,所以学历上的缺失确实会成为你进入大公司的障碍。当然还是有例外的情况:

  • 通过内部员工的推荐。
  • 通过外包公司进入后,再转为内部员工。
  • 努力成为某一领域的专家,或者建立个人影响力。

如果你还是一名大专在读学生,那么我希望你不要过早焦虑,尝试问问自己除了学历之外还有什么让你能够脱颖而出的东西?是否有自己的个人项目?是否为知名的开源项目贡献过代码,甚至只是参与编写文档?是否通过写博客阐述过自己的独到观点,并得到大家的认可?在哪家公司实过?这些都可能抓住雇主的眼球,从而弥补你在学历上的不足。

给年轻程序员的职涯建议

1.尽早确定你想做的事情

尽早确定自己想做的事情——你的职业目标,意味着你可以获得比其他人更多的时间去努力。

2.一万小时定律

3.提高工作效率。

有以下两点建议:

  • 加快工作节奏
  • 借助工具完成工作

4.简明的沟通方式

为了让别人更清晰地理解你的意图,我往往会在邮件标题最开始处直接加上“请审核”“需关注”这样的标识;对于邮件的内容,我也会将结论放在邮件的最开头部分,让其他人能在最短的时间内掌握邮件所要传达的主要信息和意图,如果需要进一步的信息,才阅读邮件的剩余部分。

5.PKSS(PK Saturday and Sunday)与持续学习

在周六和周日进行比拼,充分利用业余时间。

除了在你专注的领域投入时间学习之外,尝试学习任何你感兴趣的其他内容,比如,烹饪、写作、摄影,等等。知识往往是相通的,你学得越多便学得越快,对我而言,摄影、写作等技能也都能够对我所从事的软件开发有很好的促进作用。

6.学会控制情绪

如何才能提高自己的情绪控制能力呢?一个简单的方法就是做到对事不对人。当你对某一件事非常气愤时,首先,你需要问问自己发火有没有用,如果答案是否定的,那么为什么不静下心来想想怎样去解决问题呢?

其次,你需要有同理心,多站在对方的角度和立场考虑问题,即我们常说的换位思考,你会发现很多时候对方不是故意为难你和与你作对,而是也有他的考量和存在的现实问题;最后,你也应该有一些自己的情绪宣泄方式,比如,与朋友聊天、练习书法、看电影等,都是不错的释放方式。

7.让最优秀的人围绕在你身边

当你还是一个职场新人的时候,你需要和优秀的人一起打拼,去完成一个又一个的目标。当你的职位不断上升时,你的身边会出现一些阿谀奉承的人,而此时,你更需要那些优秀的伙伴,能够指正你的错误,帮助你朝着正确的方向前进。

8.善于归纳与表达

如果你也是一个性格内向,不善与人交往的职场新人,那么不妨也学学那位咨询师,自己创造机会进行训练,比如每天模拟进行一次讲演,经过一段时间,你会惊讶于自己所取得的突破。

9.掌握英语

10.睡眠是你更强大

没有优秀睡眠的人,看似获得了更多的时间,但其实他们往往会处在更大的压力之下,从而丧失效率。这是一种恶性循环,他们不得不通过其他方式重新激活自己。

后记

文中大部分内容来自《程序员的自我修养》,少数地方有所改动,我觉得作者的意见在当下还是有很大的借鉴意义。国庆节前临时决定做的一个关于程序员群体的成长经验分享,

文章末尾,我还是表达最初的观点,别人的成功帮不了你,有些路还是得自己走,有些坑还是得自己踩。

写代码的精髓无非就是勤动手,眼过千遍不如手过一遍。

我是马拉松程序员,可不止于代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马拉松程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 给年轻程序员的职涯建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档