怎么学程序员编程

怎么学程序员编程,第1张

程序员编程可参考如下:

对于初学者来说,可以采用视频+书籍的方式进行学习。这两种方式形成互补关系。编程教学视频可以让人迅速掌握编程,但通常比较生动、浅显,不成系统。

编程书本是比较系统、深入的,但是枯燥,所以最好的方法是书和视频结合。当人已经过了入门期之后,看书、看视频、看博客就可以随心所欲。

其实软件工程发展到今天,编程已经是一个很“职业化”的技能。业内自嘲“IT民工”,每天“搬砖”之类的,就是这种现象的反应。不扯远了,总之一句话,基本上都是些是个人都能学会的技术,没有什么神秘的。

某些培训机构招一些高考失利的考生,培训两年就把他们往公司里送,他们也一样能胜任工作。所以自学也不是件难事。但前提是,你走对了路。

如果你从二进制、编译原理、数据结构……这些开始,我估计你陷在里面就出不来了——除非有名师指点或者天赋异禀,再或者有大机缘?

不要急着做这些“学究”式的学习研究,就像学开车一样,不需要你从发动机原理学起是一样的。程序/语言是让你用的,就像车是让你开的,明白了这一点,你就可以立马轻松100倍。

所以,先选一辆“好开“的车,迅速的跑起来,享受这种微风拂面的快感和刺激,才是最重要的。

很多人想要成为程序员,在学习编程的过程中,面对各种bug和源源不断的问题,有时会对自己是否适合编程这一问题产生困扰。

作为一名教授全栈Web开发的教育工作者,我已经带领很多新手成为了程序员。好消息是,我发现没有任何人是不能学习编程的。我把它看作是一种基本的人类技能,就像阅读、写作和算术一样,任何人都可以做到。它是我们人类能力的一部分,只是需要学习。

在过去的几年的教学中,我目睹了不同的学生在学习过程中的斗争,以及在他们的挣扎中出现的一些共同问题。

下面的列表将帮助你了解你是否喜欢编程

1、缺乏好奇心

如果你对计算机是如何工作的缺乏好奇心,那么,作为一个程序员,你将永远不会成功。

学习的一个基本要求是对你所学的东西有积极的兴趣。如果你没有一个对技术好奇的头脑,你就没有精力去坚持学习要成为一个成功的程序员所需要的广博而深入的知识。相比之下,技术的世界就像一个巨大的海洋,里面充满了各种有趣的领域、相互联系的思想和各种可能,它们可以激发人们的想象力。想要潜入这片海洋并发现你所能发现的一切,需要内在的动力。

找到你的好奇心:问问你自己,编程是否真的让你感兴趣?如果没有兴趣,去找你感兴趣的东西,以节省时间和精力。但是如果你的答案是感兴趣,那么就强迫自己去发现一些你以前没有注意到的新事物,认识到浩瀚的技术海洋,再往下潜一点。

2、缺乏自主性

如果你不培养自己解决问题的能力,你就永远不会成为一个成功的程序员。

毫无疑问,要成为一个成功的开发人员,你必须对自己的学习能力充满信心。这实际上是一项基本的生活技能,如果你年满18岁,没有人有义务教你任何东西。这就是现实。当你想学习技术所需的技能时,首先要学会的是,在谷歌中输入你想要的任何东西并获取你需要的信息。除此之外,所有编程语言都有文档和规范,这些文档和规范对语言的工作方式解释的非常清楚,它们就像字典一样。作为一个程序员,最快速、最可靠的学习方法就是简单地阅读这些文档。

当你有问题的时候,在问别人答案和查阅官方文档之前,强迫自己先搜索一下,节省别人的时间。

3、面对问题缺乏毅力

如果你在遇到问题时轻易放弃,作为一个程序员,你将永远不会成功。

编程的本质是解决问题,这也是计算机产生的全部原因!每当你开始编写一个程序时,你总是会遇到一大堆问题。一旦你解决了一个问题,那么几乎总是有另一个问题在后面等着你。你在进步,但总是会有新的问题要面对。

这堆问题会让人望而生畏,令人感到沮丧。如果你觉得程序应该「能用就好」,那么你就没有精力坚持下去,因为问题还在继续出现,它们会一点一点地击溃你的情绪和决心。从字面上来说,你的工作就是找出程序为什么不能跑起来。

从我在授课上的经验来看,通常每个班都有一两个学生,和其他学生相比,他们似乎更容易遇到更多的问题——通常是非常随机和模糊的问题。我提醒学生,他们面对的问题越多,学习越深入、越彻底的可能性就越大。如果他们能通过这些问题获得深刻的理解,他们会很快发现他们变得更加自信了,因为他们面对和解决的问题比普通学生多。

你需要认识到,问题不仅仅只是问题,它实际上也是挑战。你所面临和克服的每一个挑战都能让你更深入地理解技术,更好地面对新的挑战,并迅速解决旧的挑战。

4、解决问题之后没有成就感

如果你在解决一个问题后没有兴奋感和成就感,作为一个程序员,你将永远不会成功。

与上一个问题相关的是,你成功地解决了一个问题,却缺乏「良好的感觉」。当修复bug和问题变成了一个永远不会结束的事情时,你会失去与克服问题的动力。

当你解决一个问题时,你需要的是多巴胺的释放。这类似于在电子游戏中完成了一个关卡,或者解决了一个像纵横字谜或数独这样的挑战。我们都知道,坚持通过一项挑战,然后最终赢得比赛,一般都会有成就感和兴奋感。但是如果你失去了感受这些快乐的能力,或者从一开始就没有真正有过这些感受,你将无法体验到编程带来的快乐。如果你把编程看作是一种磨砺,你只想尽可能容易地得到结果,那么你永远不会真正成为一个成功的程序员。

无论何时,当你解决了一个一直在努力解决的问题时,无论这个问题多么微小,你总是为你的成就感到骄傲。你需要休息一下,祝贺你自己完成了一项出色的工作,让成功的感觉渗透进你的心里,为你即将面临的下一个问题注入活力。

5、无法独立思考

如果你期望别人为你着想,并且主动看到你自己所在的处境的细节,你将永远不会成为一个真正成功的程序员。

当你在学习新的东西时,很容易感到缺乏知识和经验,并没有自己的观点。主动做事或者说错话似乎是有风险的。对于错误,我们的内心都有一种恐惧感。当对错误的恐惧抑制了你的探索和好奇心时,你会扼杀开发真正知识、从经验中获得的知识和「失败」的能力。当你需要依靠「权威」的观点、一个受欢迎的博客、一个最佳实践或「教科书」的答案时,那么你就没有真正地整合编程的知识。你需要对什么有效,什么无效形成自己的观点。你需要理解为什么你认为你的解决方案有效,以及使用这个方案有什么好处。你需要建立一个微妙的视角,超越那些显而易见的东西。你需要能够「证实」你的立场。

为自己着想。通过你的经验和批判性思维技巧,发展出你自己的思想体系。做出合理的猜测,坚定立场,并愿意随着新信息的出现而改变立场。

6、僵化、狭隘、混乱的思维

如果你的思维僵化,并且难以保持代码的条理化,那么你将永远无法成为一名真正成功的程序员。

我有时在学生中看到两个极端。第一种是僵化和狭隘的思维方式。拥有这种态度的人拒绝帮助,尽管会有反馈,但不会有改变。他们看事情只从一个角度看,别人给的建议被忽略。

我看到的第二个极端是思维混乱。学生们似乎使事情变得更加复杂,他们的代码杂乱无章,难以理解。他们过度思考问题,写100行代码,而其中只有10行是有用的。

当这两种心态结合在一起时,结果就是一种用蛮力的方法去设计程序。我们需要的是回顾解决方案,重新评估它,放弃最初的方法,并重新组织方法。

无法看到其他可能性或无法反思反馈会抑制成长的能力。思维杂乱无章会减慢你的成长速度,阻止你看到那些原本显而易见的模式。你的工作质量也会下降。

自我反省。你需要退后一步,看看你是接触的事物的大局是什么样子的。你要怎样才能做得更好?你能做些什么让你的生活更轻松吗?你需要什么来帮助你?

7、需要「正确」的答案,而不是识别一系列「好」和「坏」的答案的方法

如果你认为编程的最终目标是找到正确的解决方案,而不是一系列解决方案,那么作为一个程序员,你将永远不会真正成功。

当开始学习技能或编程时,学生往往想知道他们所做的是否「正确」,而答案总是「视情况而定」。

计算机科学是一门评估权衡的科学。在不同的环境下,哪条路更好,这完全取决于所处的环境和目标。当你把编程看作是一个有正确答案或错误答案的测试时,你就失去了对全局的认识,放弃了你的创造力。任何答案都可以是「正确的」,前提是你能根据具体情况证明这一点。现实情况是,编程更像是写诗或写短篇小说(如果程序很大,则可能是小说)。在你的代码中可以看到一种美学和美丽,这些东西有时只有你和其他程序员能够识别出来。你决定解决方案的原因,以及你对答案的设想,比「正确的方式」或「错误的方式」更重要。拥有一个艺术家的头脑可以让你编的程序具有选择和可能性,而不是认为只有一种处理方式。这就是编程的美——有很多方法可以解决问题,考虑不同的可能性,然后决定哪种方法最适合当前的情况。

创造性很重要。你要认识到,解决问题的方法有很多种,通过经验和积累,你会对哪些解决方案比其他解决方案感觉更好产生细微的理解。纵观全局,想象不同的可能性,相信你的直觉,你会得到更满意、更好的解决方案

如果你对学习编程感兴趣,我鼓励你开始这段旅程。记住提到的七条,并开始学习、探索在线资源,这些资源可以让你快速学习。你不会后悔的!

合格程序员,对于一种计算机程序设计语言,我们将其分为语法、语义、语用三个层面。仅仅掌握语法是不够的,不算学好。但是很多人,在履历上写自己掌握(甚至精通)了某种语言,其实就是解了语法,会写简单的程序而已。这就是为什么我们行业特别不喜欢“精通”这个词的原因。

现代软件开发,规模都比较大,不是写个HelloWorld那么简单,也不可能每个项目每件事都从头开始造轮子,我们都是站在前辈、同行们的肩膀上工作的。也就是说,语言之外,还有“库”这个东西需要掌握,不然就寸步难行。库有语言级别支持的BuildIn的库,比如JAVA里面的util、concurrent,CPP的IOSTREAM、STL等等;更多的更丰富的还有第三方提供的库,比如JDBC、Servlet、EJB的implementations等等。这些东西掌握了,干活儿才可能得心应手,不然寸步难行。

比Libaray更高层一些的,是Framework。框架的作用在于,将某一方面开发的BestPractices搞到一起,给你提供一个更易用的、不关注底层的脚手架。比如做企业应用的,SpringFramework是标配了;访问数据,Hibernate或者MyBatis也离不开,很少直接用JDBC去干活的了;做WEB的,各种MVCFramework起码得掌握一两个(springmvcorstruts2);做网络的,Netty,MINA怎么也得掌握一个总而言之,框架是绕不过去的一个门槛。

然后呢,就是环境、辅助工具。应用服务器,怎么也得会调试配置那么两个吧。TOMCAT是入门标配,JBOSS,WEBLOGIC之类,起码要弄得跑得起来;针对不同应用场景,还要会选择。开发/管理工具,ECLIPSE是标配、GIT和SVN起码要搞熟一款;其它比如单元测试工具、Build工具、测试覆盖率、CodeReview这些插件也得知道怎么用。

最后,通用的,计算机科学的基础,不说多扎实,至少不能一窍不通。说起来就那几大件, *** 作系统、数据结构&算法、编译原理、体系结构。要懂一点点,你才知道你编的程序是怎么run起来的,哪儿可能存在效率问题性能瓶颈,除了问题知道怎么debug。如果仅仅把计算机当作一个黑盒子,那也不算学好了。

最最后,还有一样,就是你要训练一下,快速理解领域知识的能力。你参与做一个项目,你懂的只是上面这些专业知识,但并不懂客户的行业知识。如何尽快地理解业务,并用你手头的工具实现业务逻辑,这点对程序员而言是非常重要的,否则你做的东西客户总不满意,GET不到重点,很麻烦。

我觉得这是一个合格的程序员的基本要求。你看,我并没要求你懂需求工程、懂项目管理、懂架构设计、懂很多算法、模式,甚至更深的专业知识。

        对此标题后,我相信会引起许多人的深思,那么什么是 ’crud‘ 程序员呢?

        所有技术都是为业务进行服务,在现如今的软件当中当中怎么可能不会有CRUD呢,答案是肯定有!

        所以我认识所说的'CRUD'程序员,更是指一些工作重复,公司的业务以致项目难度较小得不到项目对于技术上面实战的成长,没有自己的技术栈,不求上进,安于现状,或者迫于生活与经济压力没有时间或精力去提升自己的程序员,管着自己的一亩三分地不出BUG,则是万事大吉,对此我也遇到过很多身边的同事。并且曾经我也身陷此种状态下。

        之前我与一前同事讨论,他已经是开发组长了(管理大约10人)。但是对技术的看法却是我们所说的'CRUD'程序员。他说,感觉自己什么都会,啥都会写,但是至于为什么是这样的我也不知道,也不想关心。对此我没有继续讨论下去,也并没有给什么意见。说到这里其实我更觉得是受限于一个人的见识广度,眼界。当我在与他同事时,我的看法与他可能相差无几。庆幸当时的自己选择辞职离开。其实由此可以看出一个人眼界可以决定一个人高度。

        说说我自己吧,在此辞职之后,我即将面对的是生活给我带来的压力(年底辞职),面试各种被虐,基础三连:JVM,数据结构,设计模式。我真的是一窍不通(当时顶多写个单例,还不能保证并发的问题),到这里更不用说什么各组件的实现原理,更不用谈什么源码实现,我可能连看都看不懂。我才感觉到,在当初自己真的是眼界限制了自己,根本不懂量级会带来什么样的问题。为了应对面试网上查到的spring MVC的请求流程以及IOC的思想。死记硬背的去应付面试。但是面试官一听就知道你几斤几两。随便一个问题就能让你哑口无言,半个字都吐不出来。默默的憋了半天憋出来,我还没了解到哪里。处处碰壁,甚至想起放弃这个行业了。当时的想法就是只要能学习,工资都无所谓(实在是被虐的毫无信心了)。

上天眷顾,给了个机会,面试依然是被虐,但是可能会较以前体面一点吧。当时的面试官(也是后面的老大),在面试的第二天,通知了我复试,通知复试之后的心情是,我既然都这么菜了,为啥还要复试?难不成看中我了? 果不其然,顺利入职。

经历了这次的打磨,我觉得我提升的技术能力并不多,而是我的眼界,以及对于项目当中技术架构的理解。并不是我学会了Spring的原理,学会了哪个算法与数据结构,而是我学会了我知道我该知道什么,并且对于自己的技术栈如何去积累,我的方向,以及在实现我目标的途中我应该做些什么事情。当然也感谢自己的努力,师傅领进门修行靠个人。

现在的我,技术依然很菜,但有对于职业有自己的规划和学习方式,若干年后你会感谢现在把spring源码死磕到底的自己(spring真的对于一个JAVA程序员来说,真的非常重要,我目前处于死磕当中)

后来我也有面试过一些‘CRUD’的程序员,直到这个时候我才体会为什么会问这一系列的东西,因为项目的量级会让同一个业务系统遇到的问题完全不一样。而他们只处于在改业务BUG的层次,对于你所说的,他们一概不关心,实现业务就好。

说到这种我对于那些刚入行的兄弟们,建议还是去一些互联网行业的大公司,学到的东西会使你接下来的职业生涯起点不一样,正常很有可能你一年超过那些3-5年的人,现在是比较常见的。

入行一段时间的,并且与我当初经历相仿的兄弟,可以利用工作之余把最基础的东西学的更加扎实(很多人不知道数据结构,常见的算法以及设计模式),对于新技术保持实时的关注,对于一些常用的组件与语言建议深入了解,比如JVM,spring。不是说你会的新技术越多越好,走到哪里你的根基不能倒。

列一下天天会用到的:

对于以上的东西,我相信大多数企业都是非常常用的(可能还有很多我不知道的,我眼界限制我

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10069805.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存