学习是一件艰苦的事情。很多人想要成为程序员,在学习编程的过程中,面对各种 bug 和源源不断的问题,有时会对自己是否适合编程这一问题产生困扰。
我经常看到这样的问题:「我如何知道我是否能成为一名程序员?」当有人在考虑职业方向,或者对软件开发感兴趣,并且对成为程序员需要做什么感到好奇时,不可避免地会出现这种问题。
事实上,我认为这是一个很自然的问题。这有点像你想成为一个演员,你就会想知道你是否擅长表演一样。
作为一名全栈 Web 开发的教育工作者,我已经带领很多新手成为了程序员。好消息是,我发现没有任何人是不能学习编程的。我把它看作是一种基本的人类技能,就像阅读、写作和算术一样,任何人都可以做到。它是我们人类能力的一部分,只是需要学习。
在过去的教学中,我目睹了不同的学生在学习过程中的斗争,以及在他们的挣扎中出现的一些共同问题。如果你看这个列表,发现这些事情也发生在自己身上,放心吧,你会真正地在编程上吃亏,然后你可能会发现其他能够打发时间的事情。但是,如果你仍然致力于成为开发人员,那么你可以轻松地面对这些问题。
编程是人类的基本技能,就像阅读、写作和算术一样。任何人都可以通过时间和努力学会编程。
下面的列表将帮助你了解你是否喜欢编程,以及如果你想做出一些改变,你可以做些什么。
1.缺乏好奇心
如果你对计算机是如何工作的缺乏好奇心,那么,作为一个程序员,你将永远不会成功。
学习的一个基本要求是对你所学的东西有积极的兴趣。如果你没有一个对技术好奇的头脑,你就没有精力去坚持学习要成为一个成功的程序员所需要的广博而深入的知识。
相比之下,技术的世界就像一个巨大的海洋,里面充满了各种有趣的领域、相互联系的思想和各种可能,它们可以激发人们的想象力。想要潜入这片海洋并发现你所能发现的一切,需要内在的动力。
找到你的好奇心:问问你自己,编程是否真的让你感兴趣?如果没有兴趣,去找你感兴趣的东西,以节省时间和精力。但是如果你的答案是感兴趣,那么就强迫自己去发现一些你以前没有注意到的新事物,认识到浩瀚的技术海洋,再往下潜一点。
2.缺乏自主性
如果你不培养自己解决问题的能力,你就永远不会成为一个成功的程序员。
毫无疑问,要成为一个成功的开发人员,你必须对自己的学习能力充满信心。这实际上是一项基本的生活技能,如果你年满 18 岁,没有人有义务教你任何东西。这就是现实。
当你想学习技术所需的技能时,首先要学会的是,在谷歌中输入你想要的任何东西并获取你需要的信息。
除此之外,所有编程语言都有文档和规范,这些文档和规范对语言的工作方式解释的非常清楚,它们就像字典一样。作为一个程序员,最快速、最可靠的学习方法就是简单地阅读这些文档。
当你有问题的时候,在问别人答案和查阅官方文档之前,强迫自己先搜索一下,节省别人的时间。
3.面对问题缺乏毅力
如果你在遇到问题时轻易放弃,作为一个程序员,你将永远不会成功。
编程的本质是解决问题,这也是计算机产生的全部原因!每当你开始编写一个程序时,你总是会遇到一大堆问题。一旦你解决了一个问题,那么几乎总是有另一个问题在后面等着你。你在进步,但总是会有新的问题要面对。
这堆问题会让人望而生畏,令人感到沮丧。如果你觉得程序应该「能用就好」,那么你就没有精力坚持下去,因为问题还在继续出现,它们会一点一点地击溃你的情绪和决心。从字面上来说,你的工作就是找出程序为什么不能跑起来。
从我在课堂上的经验来看,通常每个班都有一两个学生,和其他学生相比,他们似乎更容易遇到更多的问题——通常是非常随机和模糊的问题。我提醒学生,他们面对的问题越多,学习越深入、越彻底的可能性就越大。如果他们能通过这些问题获得深刻的理解,他们会很快发现他们变得更加自信了,因为他们面对和解决的问题比普通学生多。
你需要认识到,问题不仅仅只是问题,它实际上也是挑战。你所面临和克服的每一个挑战都能让你更深入地理解技术,更好地面对新的挑战,并迅速解决旧的挑战。
4.解决问题之后没有成就感
如果你在解决一个问题后没有兴奋感和成就感,作为一个程序员,你将永远不会成功。
与上一个问题相关的是,你成功地解决了一个问题,却缺乏「良好的感觉」。当修复 bug 和问题变成了一个永远不会结束的事情时,你会失去与克服问题的动力。
当你解决一个问题时,你需要的是多巴胺的释放。这类似于在电子游戏中完成了一个关卡,或者解决了一个像纵横字谜或数独这样的挑战。我们都知道,坚持通过一项挑战,然后最终赢得比赛,一般都会有成就感和兴奋感。但是如果你失去了感受这些快乐的能力,或者从一开始就没有真正有过这些感受,你将无法体验到编程带来的快乐。如果你把编程看作是一种磨砺,你只想尽可能容易地得到结果,那么你永远不会真正成为一个成功的程序员。
无论何时,当你解决了一个一直在努力解决的问题时,无论这个问题多么微小,你总是为你的成就感到骄傲。你需要休息一下,祝贺你自己完成了一项出色的工作,让成功的感觉渗透进你的心里,为你即将面临的下一个问题注入活力。
5.对学习和理解感到不耐烦
如果你对学习感到不耐烦,并且希望快速、轻松地掌握所有东西,那么你将永远不会真正成功地学会编程。
作为人类,我们是在能力上有极限的生物。我们的世界变化得越来越快,计算机是造成这一现象的一大原因,而我们也只能尽我们的能力跟上这些变化。我们的大脑以一定的速度工作,并且,这个速度取决于我们的过去、信仰、情绪状态、健康……我们都将以不同的速度学习和整合信息。
科技的世界就像一片广阔的海洋。你永远不会到达终点,你永远不会到达一个没有其他东西可学的大师的地步。如果你让自己感到不知所措,你总是会受到一种要去「追赶」的压力,并且会觉得你永远都知道的不够多。如果你不能接受你所知道的,然后再多学一点,你会觉得自己一事无成,然后放弃。
相反,你需要享受为自己学习的旅程。你所获得的每一点新知识或新技能都需要让你感到兴奋。就像解决问题一样,你需要让自己感到自豪,因为你认识到自己已经向前迈出了一步,即使这是只是很小的一步。
承认你的进步。你还有很多东西要学,编程之旅永远不会结束。但是,知识是累积的,所以你要为你所知道的感到自豪,并且相信你在学习中所做的每一份努力都将为你的职业生涯的创造一个坚实的知识基础。
6.因思考而感到无聊或疲倦
如果你懒于思考,并把集中注意力进行思考看成是一件微不足道的小事,你将永远不会真正成为成功的程序员。
编程是一种思考活动。作为人类,我们确实擅长思考,但事实是,即使我们一整天都很自然地在思考一些事情,我们也懒得去思考。如果你不习惯思考,那么,在一段时间内集中精力去解决一个问题对你来说是很困难的。
这种情况的症状包括茫然地盯着屏幕,感觉一团云落在你的思想上,拖延着一个又一个问题,在浏览器标签之间来回移动,眼睛拼命地扫描 StackOverflow 寻找「答案」。这些迹象表明,你在精神上已经达到了上限,需要找到一条突破口。
在编程的时候,你会感到疲倦,思考就像锻炼身体一样消耗体力。当你不习惯利用精神能量时,你就很难集中注意力。但这就像去健身房一样,你练得越多,你就会变得越强壮。
你的大脑是一块肌肉。你要相信,你的大脑就像一块肌肉一样,当你坚持使用它时,它会变得越来越会有效地思考。
7.无法独立思考
如果你期望别人为你着想,并且主动看到你自己所在的处境的细节,你将永远不会成为一个真正成功的程序员。
当你在学习新的东西时,很容易感到缺乏知识和经验,并没有自己的观点。主动做事或者说错话似乎是有风险的。
对于错误,我们的内心都有一种恐惧感。当对错误的恐惧抑制了你的探索和好奇心时,你会扼杀开发真正知识、从经验中获得的知识和「失败」的能力。当你需要依靠「权威」的观点、一个受欢迎的博客、一个最佳实践或「教科书」的答案时,那么你就没有真正地整合编程的知识。
你需要对什么有效,什么无效形成自己的观点。你需要理解为什么你认为你的解决方案有效,以及使用这个方案有什么好处。你需要建立一个微妙的视角,超越那些显而易见的东西。你需要能够「证实」你的立场。
为自己着想。通过你的经验和批判性思维技巧,发展出你自己的思想体系。做出合理的猜测,坚定立场,并愿意随着新信息的出现而改变立场。
8.僵化、狭隘、混乱的思维
如果你的思维僵化,并且难以保持代码的条理化,那么你将永远无法成为一名真正成功的程序员。
我有时在学生中看到两个极端。第一种是僵化和狭隘的思维方式。拥有这种态度的人拒绝帮助,尽管会有反馈,但不会有改变。他们看事情只从一个角度看,别人给的建议被忽略。
我看到的第二个极端是思维混乱。学生们似乎使事情变得更加复杂,他们的代码杂乱无章,难以理解。他们过度思考问题,写 100 行代码,而其中只有 10 行 是有用的。
当这两种心态结合在一起时,结果就是一种用蛮力的方法去设计程序。我们需要的是回顾解决方案,重新评估它,放弃最初的方法,并重新组织方法。
无法看到其他可能性或无法反思反馈会抑制成长的能力。思维杂乱无章会减慢你的成长速度,阻止你看到那些原本显而易见的模式。你的工作质量也会下降。
自我反省。你需要退后一步,看看你是接触的事物的大局是什么样子的。你要怎样才能做得更好?你能做些什么让你的生活更轻松吗?你需要什么来帮助你?
9.需要「正确」的答案,而不是识别一系列「好」和「坏」的答案的方法
如果你认为编程的最终目标是找到正确的解决方案,而不是一系列解决方案,那么作为一个程序员,你将永远不会真正成功。
当开始学习技能或编程时,学生往往想知道他们所做的是否「正确」,而答案总是「视情况而定」。
计算机科学是一门评估权衡的科学。在不同的环境下,哪条路更好,这完全取决于所处的环境和目标。当你把编程看作是一个有正确答案或错误答案的测试时,你就失去了对全局的认识,放弃了你的创造力。任何答案都可以是「正确的」,前提是你能根据具体情况证明这一点。
现实情况是,编程更像是写诗或写短篇小说(如果程序很大,则可能是小说)。在你的代码中可以看到一种美学和美丽,这些东西有时只有你和其他程序员能够识别出来。你决定解决方案的原因,以及你对答案的设想,比「正确的方式」或「错误的方式」更重要。拥有一个艺术家的头脑可以让你编的程序具有选择和可能性,而不是认为只有一种处理方式。这就是编程的美——有很多方法可以解决问题,考虑不同的可能性,然后决定哪种方法最适合当前的情况。
创造性很重要。你要认识到,解决问题的方法有很多种,通过经验和积累,你会对哪些解决方案比其他解决方案感觉更好产生细微的理解。纵观全局,想象不同的可能性,相信你的直觉,你会得到更满意、更好的解决方案。
10.不注意细节
如果你掩盖细节,忽略一些小事情,你将永远不会成为一个真正成功的程序员。
计算机是精密的机器。当涉及到计算机编程时,你需要以计算机期望的方式精确地提供必要的命令。如果你不这样做,什么都不会奏效。这里面没有一个中间地带,要么是有用的,要么是没有用的。
这意味着当你在编程时,你必须注意细节。每个空格、括号或分号都要注意。一旦有任何问题,那么什么都不会起作用。当计算机弹出一条错误信息时,你必须能够查看该信息并准确理解它告诉你的内容。事实是,如果你错过了这样的细节,你可能需要花几个小时来追踪一个问题,而它实际上是只是一个打字错误造成的。
正如人们所说,细节是魔鬼。这句话对于编程来说是绝对正确的。
注意细节。细节很重要,你必须接受这一点。在你编程的时候,你需要浏览你的代码,找出任何不合适的地方。你可以使用帮助你快速识别问题的工具。
总结
其实我注意到,有些学生特别注重商业,他们经常关注结果而不是过程。他们希望得到一个能够推动他们的商业理念发展的应用程序,他们认为学习曲线是阻碍他们实现业务发展目标的障碍。
在回顾那些很难真正成长为程序员的学生时,我发现对于这个过程的不耐烦抑制了他们真正理解技术所需的学习。他们倾向于将技术视为达到目的的一种手段,而不是探索和享受的一个知识领域。
作为这一点的自然延伸,我发现有些学生更倾向于做生意,他们学习困难。一般情况下,他们会争先恐后地寻找资源/模板,让项目为客户工作,或者将工作外包给其他人。他们真的很喜欢编程,但人们付钱给他们编程却让他们更加兴奋!
因此,我要补充的是,那些渴望创业、擅长销售、网络和业务开发的学生可能比其他人更难以学习编程技能。他们天生渴望创造经济机会并将人们与解决方案联系起来,这使他们对编程中涉及的繁琐细节感到不耐烦。
虽然编程是一项很难学习的技能,但它肯定是大多数人都能学习的技能。上面的列表包含了阻碍我们前进的态度和心态,大多数人都可以克服这些态度和心态。如果不精通编程的话,他们就不能在编程领域发展出自己的能力。