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