相信很多初学编程的朋友都有这样的苦恼:为什么我感觉自己基础都掌握了,也看过很多视频和资料了,但就是自己动手敲代码的时候就开始懵逼了!
通常新手程序员会以不同的方式来表达这个疑问,比如:
“我通过在线课程学习了前端,但是我还是不知道怎么用它来编程。”
“我知道这个理论,可是怎么把它运用到我的代码里啊?”
“我知道前端框架,但我就是不知道何时何地使用它们。”
现在在我们来客观的谈一谈这个问题。
首先要说的是,如果你觉得自己基础都掌握了,但是就是不能在没有他人指导的情况下写出一个程序,那么我只能说你并没有真正掌握这些基础知识。
我能理解你面对这一情况内心的沮丧,但是你要知道这是成为一名优秀程序员必经的一个阶段,所以即使你有千百个不愿意也不得不面对这个现实。
一、造成这一问题的原因
1.“人造”的编程环境
造成这个问题的一大因素是在线编码课程为学生提供了一个“人造”的编程环境,在这个“人造”的编程环境中学生们通常都会在一个已经包含了指令和提示的网页上练习代码。
然而这并不是编程真正的打开方式。所以课程结束后,当没有人再为学生提供这样一个“虚假”“舒适”的编程环境时,面对真正的编程环境,学生们就开始不知所措,失去了目标和方向。
当然,在线课程提供这种“人造”的编程环境并不是全然不好的。因为建立一个真正的编程环境通常是很复杂并且在真正的编程环境里进行编程会让初学者感到沮丧。而在线课程提供的这种“人造”的编程环境允许你不用建立起自己的编程环境就可以获得许多编程经验。
然而,这种“舒适的”编程环境虽然在一定程度上减轻了你在初学编程阶段的挫折苦痛,但是它也只是将学习编程的挫折苦痛拦截到课程结束后,等课程一结束,它们就会出现在你面前。
2.过度的指导
当你结束了一个在线课程,或是学习完一本书,或是在现实编程中接受他人建议时,你都能从中得到很多的提示和指导。在这种情况下,你甚至可以在刚拿到一个程序时就能知道你要输入什么甚至知道这个程序的最终结果。
然而当你试图自己建立一个项目的时候,你只能看到一片空白的输入框:没有指令、没有提示、更没有人告诉你下一行要输入什么。像这样从一个简单的环境跳到一个困难的环境,你自然会感到惊慌失措甚至自我怀疑。
接受过度指导的另一个后果是:学习了语法但没有学习到编程的概念。
语法就是你输入的特定编程语言的文本。但是每种语言的语法都是不尽相同的,而你在学习编程时,不只是要学习编程语言的语法,更重要的是要学习他们的概念。
了解概念能让你理解代码实际上能做成什么,以及代码如何用不同的语言实现。
但是,我并没有说接受指导是不好的。因为当你刚开始学习的时候,你肯定需要有人来指点迷津。如果完完全全自学没有接收到任何建议指导的话,你可能会像一只无头苍蝇一样在编程世界里盲目飞行。
而在你的编程生涯的每个阶段,你也都需要有人来指导你,但是一定不要接受过多的指导。因为作为初学者,如果接受了过多的指导就会给你一个错觉:编程很简单。这就会造成当你不能成功地独自写出程序时,对自己的编程人生感到怀疑。
二、如何解决这个问题
1.创建一个真正的编程环境
每种编程语言需要的编程环境都是不同的。
想要创建一个真正的编程环境,首先,你需要一个文本编辑器或一个IDE(集成开发环境)。然后你需要找出对你正在学习的语言来说最适合的编辑器并安装它。
其次,你需要知道如何创建并运行一个包含代码的文件。
如果你是使用一个IDEr来作为你的文本编辑器,那么这个功能就会被构建到Bluefish Editor中。你就需要了解如何创建一个新项目以及需要点击什么按钮来运行代码。
但是如果你没有使用IDE,那么你可能就需要学习如何利用命令行来运行代码。你可以找一些入门指导或者看免费教学视频来学习使用命令行。
最后,一旦你可以编写代码,并且能够正常运行程序,那么基本上你就开始正式步入专业程序员的道路了。
2.从小项目做起
尝试去做一些稍微超过自身水平的项目并不是一件坏事,因为你可能会发现它很有趣并且它能激励你学习更多的东西;但是从另外的角度来看,如果浪费了不少时间项目却毫无进展,也会让你感到灰心、沮丧。
一千个人就有一千个哈姆雷特,适合别人的方法不一定就适合你。所以当激励法对你起反作用的时候,也许你就该考虑从基础的小项目做起了,毕竟所有东西都是从零开始的。
刚开始的时候,你可以编写一些基于文本的程序,因为编写这种程序比编写其他程序相对来说更容易一些,它只需要掌握:如何在屏幕上显示字符串;以及如何获取用户输入的字符串。
我的建议是:先制作一段时间的网页。比如做一些像“轮播图”、“表格框架”等进行基础巩固;又或者,做一些JS的网页版简单小游戏,通过这些小项目来深入学习你所选择的编程语言的所有特性。
3. 练习白板写代码
你必须不需要任何指令地从零开始编写自己的代码。也就是说你要从一个空白文档(白板、白纸等)开始,然后在不听从任何指示的情况下自己敲出每行代码。
从这一步开始意味着你已经准备好迎接腥风血雨了。因为后面你将花费大量的时间进行调试,并要尝试理解每个bug。但是在每次检测和修复bug的时候,你的编程技能都能得到相应提高,并且你也能获得真正的编程经验。这就是作为程序员学习和成长的方式。
当然你也可以通过查看别人的代码来获取经验,但是你不能直接复制黏贴,因为如果你直接复制黏贴的话,这样的学习将毫无意义。你要做到的是:认真分析别人的代码;得出它是如何正常运行的结论;然后再运用获取的经验来进行独立编程。
4.不懂就问:懂得如何寻求帮助
在学习编程的过程中,你肯定会遇到一些你自己无法解决的问题和一些你无法靠自己修复的错误。虽然这只是你学习编程的一部分,但如果你已经花了2h+来尝试解决你的问题未果时,为了提高工作效率,就应该转向寻求专业帮助了。
然而有些学生在学习编程时会在没有尝试过自己解决问题的情况下立刻寻求别人的帮助,这不管是在IT领域还是其他领域,都是不被赞成的。因为不管出现了什么难题,都要自己先去尽力解决才有学习的意义。不然最终还是回到了“靠着别人的指导过活最终自己什么也没学到”这个问题上。
那么我们应该如何寻求帮助呢?
基本的问题你可以先google一下,网络世界那么大,单靠这个你就能解决不少问题。
如果你遇到一些靠个人之力无法解决的问题,要注意的是即使他人帮助你解决问题,也不要直接把别人的答案复制黏贴到你的问题上。你要做的是分析答案并了解错误背后的原因,只有这样当你下次再遇到相同的错误的时候,才能靠自己修复错误。
另外,如果你经常遇到一些靠个人之力无法解决的问题,最有可能的原因是你做的项目太大了以至于远远超过了你的自身水平,这里就要重申一下上一条建议:从小项目做起,一步一步提升自己的水平。
5.正确的提出问题并寻求帮助
也经常会有初学者羞于提问或拒绝提问,很大一部分原因是他们认为编程社区里面的那些大神有些不友好甚至态度有些令人生畏,所以他们不想跟这些人打交道,这对于初学者来说是非常可怕的事情。
其实,虽然有些专业的程序员会在回答时有些“直言不讳”,但是如果你以正确的方式提出你的问题,你会发现社区里的很多大神是非常友好的,并且他们往往能够一针见血的点出你的问题所在,同时能给出解决方案。
如果你根据下面的指导提出问题,肯定可以吸引很多友好的程序员帮助你解决问题。可能还能防止一些虽然脾气有些暴躁但是很善良的程序员一边帮你解决问题一边对你发脾气。
发布出确切的错误点。这是最重要的一个部分,因为如果回答问题的人没看到确切的错误信息,就意味着他们要浪费自己的时间来找出你的程序的错误所在再给予解决方案。
如果你也不知道确切的错误信息,那么请说明你推测的会发生错误的部分,和实际发生的情况。
粘贴出你的所有代码。一般情况下,看不到完整的代码来调试问题是很困难的。如果代码不是太多,最好的提问方式就是将代码完整粘贴到Github Gist中,然后把相关链接放在问题里。
复制出来的代码格式要正确,而不是简单的复制黏贴。你要学会如何对你的代码进行排版,使它看起来更便于阅读。
指出你已尝试过的方法。这证明你已经尽力了,而不是有问题没有进行思考就直接扔出来让大家帮忙。
使用正确的编程术语。虽然你还只是一个初学者,并不能将所有的专业术语都使用正确。但是你最好还是尽自己所能使用正确的专业术语。因为努力学习常用专业术语并正确使用它们对你以后的发展也是很有帮助的。
三、总结
最后总结一下这篇文章所提到的建议
给自己创建一个真正的编程环境,使用IDE或者空白文本编辑器(白板)来编写程序。
一定要从头到尾自己编写所有的代码,不要在没有理解的情况下直接复制黏贴他人的代码来欺骗自己。
从小项目开始做起,编写一些基于文本的程序来练习你正在学习的编程语言,然后再慢慢的进行一些更大更复杂的项目。
疯狂的练习,编写大量的代码。在学习理论知识的时候就要不断地尝试把理论应用到自己的代码当中。学习、实践;学习、实践;学习、实践······
要先学会自己解决问题,当自己解决无果,陷入困境时,要懂得如何寻求帮助。
不要羞于提问或拒绝提问,要懂得运用正确的方式寻求他人的帮助。
毋庸置疑,学习编程并不容易。特别是当你刚刚上完编程课程,开始走上自己的独立编程之路时,这种感觉就会更加的强烈。但是请你不要就此质疑自己的编程能力,除了一小部分天才之外,谁不是一步一步从小菜鸟走上大神之路的呢。
最后,在这里也祝愿大家都能在编程之路上愉快的越走越远。