编程不努力,老大徒伤悲

2020 年 7 月 5 日 CSDN

面向编程,有人擅长且如鱼得水,有人感兴趣却不知从何入手,也有人徘徊于门口而举棋不定。在日新月异的高科技时代,编程是未来发展的主流趋势之一,那么,除了敲代码技能之外,它还需要具备哪些技能?一个人又该如何判断自身是否真的能够胜任这份高并发、高性能、高可用的高薪工作?或许本文能给你一些启发。

作者 | Jonathan Bluks
译者 | 弯月,责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

以下为译文:

我经常在Reddit或Quora上看到有人提问:“如何才能知道我会成为一名成功的程序员?”当人们在考虑职业转型,或者对软件开发感兴趣时,提出这个有关编程的问题也再所难免。

实际上,我认为在没有经过任何有关计算机的正式培训的情况下,入门编程行业最大的阻碍就是怀疑自己能否成为成功的程序员。我们很自然地认为,如果自己不擅长编程,那么就不愿意迈出第一步。就好像你想成为演员,想知道自己是否擅长表演。

作为一名教授Web全栈开发的讲师,我曾教过许多初学者。好消息是,我很少遇到学不会编程的学生。

我认为编程是人类的一项基本技能,就像阅读、写作和数学一样。任何人都能学会,这是我们人类能力的一部分,但确实需要学习。

在过去的两年教学中,我目睹了很多学生在学习编程的过程中遇到了很多困难,其中许多困难都是共通的。仔细阅读本文列举的十大迹象,如果你发现自己遇到了这些问题,那就表明你确实不擅长编程,也许你应该将时间投入到其他领域。但是,如果你的目标仍然是坚持成为开发人员,那么请坦然面对这些问题,并慢慢改正。

下述迹象可以帮助你了解自己是否不擅长编程,以及如果你想做出改变,应该做些什么。


缺乏好奇心


如果你对计算机以及技术原理缺乏好奇心,那么永远也无法成为一名成功的程序员。

学习的基本要求就是对所学事物感兴趣。如果你对技术并不好奇,那么就没有动力坚持学习,掌握成为一名成功的程序员所需的广泛而深入的知识。

如果你感觉自己如鱼得水在技术的海洋里畅游,感觉这个世界里充满了乐趣、相互联系的思想以及激发想象力的可能性。发现所有的一切需要的是内在的动力驱使。

找到自己的好奇心:问问自己是否对编程感兴趣。如果你的真实答案是“否”,那么请寻求其他你感兴趣的事物。但是,如果你的回答是“是”,那么就请开始寻找从未见过的新事物,认识这片广阔的海洋,然后再不断深入。


缺乏自主性和资源


如果你不培养解决问题的能力,那么永远也无法成为一名成功的程序员。

毫无疑问,如果想成为一名成功的开发人员,你必须对自己的自学能力充满信心。这实际上是一项基本的生活技能,如果你已年满18,那么任何人都没有义务再教你任何东西。这就是现实。你需要自己动手寻求对你来说很重要的信息并学习。

在开发的世界里,你所需的所有信息都可以在一个神奇的地方找到,这个地方以前被称为信息超级高速公路。这个庞大的图书馆有一个巨大的门户:搜索引擎。当你想学习科技方面的技能时,首先要学会如何通过网络搜索所需的信息。

除此之外,所有编程语言都拥有详细的文档和规范解说语言本身的工作原理。就像使用字典一样,遇到不认识的单词就要查字典。最快、最可靠的培养程序员技术力的方法就是阅读文档。文档里什么都有。

利用资源:认识到所有的答案都可以通过互联网找到。如果你有任何疑问,在向其他人询问答案之前,务必先尝试自己搜索并查看文档。如果你的尝试失败了,而且未能找到所需的答案时,向他人求助可以节省时间。


面对问题时缺乏毅力


如果你在遇到问题时轻易放弃,那么永远也无法成为一名成功的程序员。

编程的本质是解决问题。发明计算机的根本原因也在于此!无论何时开始从事编程的工作,都会遇到一系列的问题。在解决完这个问题之后,还会遇到另一个问题。你在不断地进步,但是新的问题会源源不断地涌现。

在面对一堆问题时,我们可能会有点泄气和沮丧。如果你觉得每样事物都应该“正常运转”,那么当问题没完没了地涌现时,你就会失去坚持下去的勇气,而你的决心也会一点一点地被瓦解。你的工作正是搞清楚为什么有些地方不能正常工作。

从我上课的经历来看,每个班级通常都有1-2名学生似乎会遇到更多的问题,而且通常都是随机而且难以理解的问题。我会告诉学生们,他们遇到的问题越多,就越有可能更加深入和透彻地学习。如果他们能够通过这些问题学习到知识,那么很快就会发现他们比普通的学生更有信心,因为他们遇到并解决了更多的问题。

耐心接受:你需要认识到,你遇到的每一个问题都不是问题,而是挑战。每次遇到问题并克服困难都可以加深你的理解,同时还可以培养应对新挑战的能力,并加速解决旧问题。


解决难题后没有成就感


如果你在解决问题后没有感觉到兴奋,没有成就感,那么永远也无法成为一名成功的程序员。

与前一个“太容易放弃”相关的问题是,在成功解决问题后,缺乏“成就感”。当你感觉修复错误和解决问题就好像一场永无止境的磨难,那么就无法感受到解决问题所带来的兴奋感。

每当问题得到解决时,你的多巴胺就会飚升。就好像某个游戏通关,或解决某个填词游戏或数独游戏。我们都知道,通过坚持不懈的努力解决难题并最终赢得胜利的感觉非常好。但是,如果你失去感受这些感觉的能力,或者一开始就不怎么关心,那么就无法体验编程带来的快乐。如果你将编程视为一种磨砺,而你只想尽可能轻松地获得结果,那么永远也无法成为一名成功的程序员。

庆祝胜利:每当你解决某个问题时,无论问题多么小,都应该为自己的成就而感到自豪,休息一下,祝贺自己出色地完成了工作。深深地感受成功的喜悦,并为迎接下一个问题而充满动力。


对学习没有耐心


如果你对学习没有耐心,而且希望快速而轻松地掌握所有内容,那么永远也无法成为一名成功的程序员。

作为人类,我们是能力非常有限的生物。即使世界发展的脚步越来越快,而且计算机是推动世界发展的主要因素,但我们只能尽最大努力加快步伐。我们的大脑的运转速度很有限,而且还会受到过去的经历、信念、情感状态、健康状况等各种因素的影响。我们学习和整合信息的速度也不同。

技术的世界就像一片广阔的海洋。你永远也走不到尽头,而且永远也无法成为无所不能的大师。如果你感觉不堪重负,那么就总会感觉到拼命追赶的压力,而且总感觉自己掌握的知识永远不够。如果你无法接受自己掌握的知识很有限,并努力学习更多知识,那么就会觉得自己无所适从,并最终放弃。

你应该学会享受学习的过程。为自己掌握的每一点知识或新技能感到兴奋。就像解决问题一样,你应该为自己感到自豪,并认识到自己向前迈出了一步,即使是很小的这一步。

认可自己的进步:需要学习的东西很多,编程之旅没有尽头。但是知识是一点一滴累积起来的,所以你应该为自己掌握的知识感到自豪,并相信自己在学习中所做的一切努力都会成为职业生涯坚实的基础。


不愿思考


如果你不愿思考,并认为集中注意力专心做事是件苦差事,那么永远也无法成为一名成功的程序员。

编程是一种思维活动。作为人类,我们善于思考,但现实是,即使我们无时无刻不在思考,但我们的思维却很懒惰。长时间集中精力解决某个问题是一件很难的事情,所以需要养成习惯。

下列症状表明你并没有积极地思考:茫然地盯着屏幕,思绪四处飘荡,一直在一个问题上纠结,来回在浏览器选项卡之间切换,拼命在StackOverflow上寻找“答案”。这些迹象表明你的思维遇到了阻碍,你需要找到解决方法。

在编程的时候,你会感到疲倦,思考会消耗身体的能量,就像锻炼身体一样。如果你不习惯运用精神能量,则很难集中精力。但这就像去健身房一样,锻炼得越多就越强壮。

思维就像一块肌肉:坚信你的大脑就像一块肌肉,只要不断练习我们的思维就可以更强壮,更有效。当你将各个线索放到一起并在脑海中拼凑出整体的概念,解决方案就会越来越简单。


无法独立思考


如果你希望别人为你思考,又不愿考虑自身的情况,那么永远也无法成为一名成功的程序员。

每当学习新事物时,你往往会感觉到自己缺乏知识和经验,因此无法形成自己的观点。采取主动或做/说错事似乎有风险。

我们的内心很害怕犯错误。当对错误的恐惧限制了探索欲望和好奇心时,你学习知识的能力就会被扼杀,无法从经验和失败中吸取教训。当你对“专家”的意见、流行的博客、最佳实践或“教科书”的答案形成依赖时,那么这些编程的知识就不会成为你自己的能力。

你需要针对哪些有效,而哪些无效提出自己的看法。你需要理解为什么你觉得你的解决方案有效,以及有什么好处。你需要从细微的视角观察问题,而不仅仅着眼于显而易见的问题。你需要为自己的立场辩护,并在立场发生变化时,建立自己的新观点。

独自思考:通过经验和批判性思维技巧,建立自己的观点。做出合理的猜测,站定自己的立场,并愿意随着新信息的出现而改变自己的观点。


僵硬、狭隘和混乱的思维


如果你的思维僵化,而且很难保持代码井井有条——即通过扩展思路保持思维有条理且专注,那么永远也无法成为一名成功的程序员。

我经常看到两个极端的学生。第一种是思维僵化狭隘。持有这种态度的学生拒绝别人帮忙,而且无视反馈,不改变自己的态度。仅从一个角度看待事物,忽略所有的建议。

第二种极端是思维混乱。这类的学生经常把事情搞得不必要的复杂,他们的代码混乱且难以阅读。他们过度思考问题,即便10行代码就够了,他们也会写够100行。

当这两种思维方式结合在一起时,就会得出一种笨拙的编程方法,例如蛮力方法会导致层层修复和各种奇技淫巧。他们需要做的是回到解决方案,重新评估解决方案,放弃最初的方法,并重新组织。

看不到其他可能性或不愿接收反馈会抑制自身的成长和提升。思维混乱会拖慢前进的脚步,让你一叶障目看不到原本显而易见的模式。最终只会导致工作的整体质量下降。

自我反思:你需要退一步,从大局着眼思考问题。如何才能更好地完成工作?如何才能减轻自己的负担?是否遗漏了能够帮助到自己的人或事物?


一味寻找“正确”答案,看不到一系列“好”和“坏”答案


如果你认为编程的最终目标是寻找唯一正确的解决方案,而不是一系列解决方案,那么永远也无法成为一名成功的程序员。

在刚开始学习技术或编程的时候,学生们经常纠结自己的做法是否“正确”。而答案往往是“取决于具体情况”。

计算机科学是权衡利弊的科学。在不同的情况下哪条路更好,完全取决于环境和目标。如果你认为编程只有正确答案与错误答案,那么你就会一叶障目不见森林,放弃自己的创造力。任何答案都可能是“正确”的,只要你把它放到特定的情况下。

实际情况是,编程更像是写诗或短篇小说(如果程序很大,则可能是长篇小说)。透过你的代码可以看到一种美感和优雅,尽管有时只有你和其他程序员才能看到。你决定解决方案的原因以及发现答案的方法远比“对还是错”更为重要。通过艺术家的思想选择和尝试,而不是仅仅思考一种方法。这就是编程之美,解决问题的方法可以有很多种,只有认真思考各种可能性才能发现最适合的解决方案。

发挥创意:你必须明白解决问题的方法可以有很多种,你可以通过自己的经验和实践,锻炼判断哪种解决方案更好的能力。放眼大局,想象不同的可能性,并相信自己的直觉会带来更令人满意的、更好的解决方案。


不注意细节


如果你掩饰细节,忽略小事情,那么永远也无法成为一名成功的程序员。

计算机是精密仪器。在计算机上编程时,你需要按照计算机期望的方式精确地提供必要的命令。如果做不到这一点,就无法进行任何操作。在大多数情况下,没有“差不多能行”的中间地带,只有“行”或者“不行”。

这意味着在编程时,你必须注意细节。每个空格、括号和分号都很重要。如果使用不当,就会引发问题。当计算机返回错误消息时,你必须认真查看消息,并弄明白消息说明了什么问题。在实际工作中,如果你错过了这样的细节,那么就有可能需要花费数小时来查找拼写错误等导致的问题。

常言道,细节决定成败。在编程领域,此言非虚。

注意细节:细节很重要,你必须意识到这一点。在写完一段代码后,你应该仔细检查,确保没有意外。你可以通过组织方法和工具帮助你快速发现问题。


补充:商业头脑


这是我注意到的一个小问题,有些学生特别有商业头脑,他们往往更加关注结果而不是过程。他们希望获得一个“可行的应用程序”,然后按照他们的经营理念向前发展,他们希望“成为第一个进入市场”的人,并且他们将学习曲线视为实现业务发展目标的障碍。

在反思那些难以真正成长为程序员的学生时,我发现他们对过程的不耐烦成为了他们学习技术的阻碍。他们倾向于将技术视为达到目的的手段,而不是要探索和享受知识。

我发现有些学生很有商业头脑,但他们的学习困难重重,他们常常会迅速找到自由职业者替他们完成那些自己无法胜任的工作。他们会争先恐后地寻找资源/模板来为客户服务,或者将工作外包给其他人。他们确实不擅长编程,但是人们却愿意付钱让他们来编程,这真的很神奇!

因此,我要补充的是,那些渴望创业的学生擅长销售、人际关系和业务发展,他们学习编程的难度比其他人更大。他们天生渴望创造赚钱的机会,并有办法为客户找到解决方案,同时自己却对编程涉及的繁琐细节不耐烦。


总结


虽然编程是一种很难学习的技能,但我敢肯定大多数人都能够掌握这项技能。本文列出的十大迹象包含阻碍前进的态度和心态,但是大多数人都可以克服,并在编程领域取得发展(即便未能完全精通)。

如果你对学习编程感兴趣,那么我鼓励你勇于尝试。请牢记本文的十大迹象,并利用众多的在线资源快速前进。你不会为此后悔!

原文:https://blog.usejournal.com/10-signs-you-will-suck-at-programming-5497a6a52c5c

本文为 CSDN 翻译,转载请注明来源出处。

更多精彩推荐

13 大论坛同开播!数百专家带你从机器学习技术与工程实践,聊到开源生态 | AI ProCon 2020

饿了么四年、阿里两年:研发路上的一些总结与思考

可怕!如果张东升是个程序员......

疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利

为了这个技术,操作系统把 CPU 害惨了!

都在说DeFi,到底什么是DeFi?

点分享
点点赞
点在看
登录查看更多
0

相关内容

人们为了让计算机解决各种棘手的问题,使用编程语言 编写程序代码并通过计算机运算得到最终结果的过程。
【2020新书】软件和人工智能项目中的设计思维,157页pdf
专知会员服务
118+阅读 · 2020年8月30日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
【干货书】Python 编程,480页pdf
专知会员服务
237+阅读 · 2020年8月14日
【经典书】算法C语言实现,Algorithms in C. 672页pdf
专知会员服务
81+阅读 · 2020年8月13日
专知会员服务
164+阅读 · 2020年7月27日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
90+阅读 · 2020年6月28日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
213+阅读 · 2020年2月21日
深度学习这些“坑”你们有没有踩过(入门误区)
计算机视觉战队
5+阅读 · 2019年4月27日
研究SLAM,对编程的要求有多高?
计算机视觉life
24+阅读 · 2019年2月18日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
当我们在读书时,我们在读什么?
互联网er的早读课
3+阅读 · 2018年3月19日
零基础小白,如何入门计算机视觉?
计算机视觉life
9+阅读 · 2018年3月8日
只需5个月,编程小白也能掌握机器学习
ImportNew
5+阅读 · 2017年12月4日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Arxiv
6+阅读 · 2020年2月15日
Arxiv
26+阅读 · 2019年3月5日
Arxiv
4+阅读 · 2019年1月14日
Arxiv
6+阅读 · 2018年3月25日
Arxiv
22+阅读 · 2018年2月14日
VIP会员
相关VIP内容
【2020新书】软件和人工智能项目中的设计思维,157页pdf
专知会员服务
118+阅读 · 2020年8月30日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
【干货书】Python 编程,480页pdf
专知会员服务
237+阅读 · 2020年8月14日
【经典书】算法C语言实现,Algorithms in C. 672页pdf
专知会员服务
81+阅读 · 2020年8月13日
专知会员服务
164+阅读 · 2020年7月27日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
90+阅读 · 2020年6月28日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
213+阅读 · 2020年2月21日
相关资讯
深度学习这些“坑”你们有没有踩过(入门误区)
计算机视觉战队
5+阅读 · 2019年4月27日
研究SLAM,对编程的要求有多高?
计算机视觉life
24+阅读 · 2019年2月18日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
当我们在读书时,我们在读什么?
互联网er的早读课
3+阅读 · 2018年3月19日
零基础小白,如何入门计算机视觉?
计算机视觉life
9+阅读 · 2018年3月8日
只需5个月,编程小白也能掌握机器学习
ImportNew
5+阅读 · 2017年12月4日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
相关论文
Arxiv
6+阅读 · 2020年2月15日
Arxiv
26+阅读 · 2019年3月5日
Arxiv
4+阅读 · 2019年1月14日
Arxiv
6+阅读 · 2018年3月25日
Arxiv
22+阅读 · 2018年2月14日
Top
微信扫码咨询专知VIP会员