应该如何开始学习写代码

事先声明

博主花生也仅仅是自学了2年左右的Web开发,才疏学浅,如文中有不当的地方欢迎各位看官路过指正。

由于是分享自己的学习经历和经验,所以很难完全站在客观的角度来说清这一切,花生会努力的保证本文的客观性,但是可能或多或少都会有一下主观观念在里面,因此,文中的大多意见仅供参考,切勿盲目全信。

关于博主

博主自称花生,写本文时(2016-5)为一个普通的大二计算机专业学生,自学Web开发2年左右。在学校中创立Web开发协会,专注分享与开源。多次独立完成过协会官网搭建,曾用JS写过爬虫Pxer被使用上万余次。主攻方向为Web开发全栈,主修语言为JavaScript与PHP。

正文

如何学会写代码

如果你打算成为一名程序员,那么这篇文章会比较适合你。本文不会牵扯任何技术性的内容,只是告诉读者,这一切是否应该开始、应如何开始。

开始前的基础与门槛

计算机基础对于自学编程很重要吗?0基础和有基础差别大不大?关于这2个问题,花生的回答是 很重要 非常大。

花生自学了2年左右,自认为进度还比较快,花生一方面把它不要脸的归结为天赋,另一方面就是所谓的基础。花生从小因为家里工作原因,接触计算机算是非常早了,在幼儿园之前就已经会玩了纸牌,而关于编程,在高中时曾经教过VB(Visual Basic)。

计算机基础

计算机基础会潜移默化的影响你的学习进度。这些计算机基础并非是什么特殊的技能,而是关于电脑的熟练程度,这与接触使用电脑的时间有很大的关系。

与其说是计算机基础,不如说是与计算机的熟悉程度。对于计算机的认知很难用具体的语言来表示出来,比如zip rar是什么格式的文件、windows控制面板中的东西都有什么功能、输入法的中英文全角半角符号等等等,很基础也很有用,但是却没有办法教,只能自己一点点去摸索认知。

如果你经常接触计算机,并且喜欢去深究其原理,那么你的计算机基础一定不会太差。

编程基础

如果在正式开始学习编程前,有一定的编程经验,那么对于自学也是十分有帮助的。编程基础不仅仅是指具体的写代码,有可能是编写Office软件函数计算、修改软件配置文件等。花生以前就通过百度学会了流星蝴蝶剑(某单机游戏)Bot(电脑控制的角色)的写法,所以经常自己写一个Bot与它对战,其实无非是出生是拿什么武器,对谁有敌意什么的,十分简单。

如果你编写或修改过这样的配置文件或代码,那么这种思维会对你的自学过程有很大的帮助。

0基础

0基础是什么意思呢,简单来说就是对电脑一无所知,其临床反应为:一指弹打字、不会通过搜索引擎搜索下载软件、分不清xp与win7、用鼠标切换输入法和复制粘贴、分不清.zip .rar .png .jpeg .mp3 .rmvb .txt .doc .exe 都是什么文件 等

如果你是0基础并且已经踏入大学,那么花生强烈建议你不要涉足编程领域,如果你以是计算机专业大学生,建议马上转专业。如果你一定要学习编程,那么,一定要认识一个非常熟的前辈或加入某个技术交流组织,否则0基础是很难自学下去的。

不负责任的说,如果都步入大学了计算机依旧是0基础,那么说明你对计算机没有任何的兴趣也不想有任何的钻研,那么编程绝不适合你!

第一步——选择方向

如果你找到一个前辈告诉他:“我要学习编程,现在应该如何做?”。那么他一定会很困惑,因为编程有太多太多的方向。

编程不仅有大方向比如游戏开发、Web开发、移动端开发等可以选择,每一个大方向还细分了很多小方向。拿花生比较了解的Web开发来说,还有前端设计开发、后台开发、数据库开发、服务器运维等。对应方向的程序员对除自己方向外的了解大多很少,所以如果你问花生(Web开发向程序员)关于游戏开发的方向选择,花生可能就无法帮到你了。

决定具体的方向是比较困难的,但是可以先决定大方向。

首先要搞清自己对于什么感兴趣,比如手机APP、网站、桌面程序、游戏等。想明白后去百度,了解一些基本的名词和岗位,比如Web开发中包括网页前端工程师、重构工程师、PHP程序员等,了解具体岗位的具体职责,看看自己是否真的对此感兴趣。

确定了几个自己比较满意的职位后,去各大招聘网站如51Job、拉勾网、前程无忧等搜索一下,看看薪资待遇与岗位数。并不是所有的程序员薪资待遇都是一样的,哪怕付出了同样的努力,不同方向的程序员薪资待遇差距是非常大的,拿花生比较了解的Web开发来说,ASP.NET与PHP的薪资待遇就有不小的差距。

如果找到了自己感兴趣的方向和自己感兴趣的岗位并且薪资待遇也令你满意,这时候你就可以找一些同方向的前辈去咨询现在应该如何做了。一般来说对应方向都有一些入门的基础技能需要掌握,拿花生比较了解的Web开发来说,HTML+CSS对于每一名Web开发者来说几乎一定要了解的。

询问前辈确定了具体要学习的技术(一般来说是一门编程语言),然后这时候就可以利用学习资料去自学了。

如果你想要学习Web开发,花生整理了一篇关于学习Web开发的具体步骤,你可以在阅读完本文后再去阅读 ——决定学习Web开发应该如何做

学习的步骤与流程

想要学习一门技术无非包括某几种方式。不同时期应该采取哪几种学习方式,有何原则,这是下面要介绍的内容。

视频教程

入门首选的学习方式。视频教程大多是面向0基础的,讲的详细而全面,某些负责任的老师会从安装代码编辑器、调整代码字体颜色开始教。

通过视频教程,你不仅仅会学到技术,还能学到解决问题的方法,遇到Bug后视频中的老师是如何处理的、老师的编程习惯是怎么样的,这些都会潜移默化的影响着你。因此,老师很重要。

挑选视频教程时一定要注意下面的2个原则:

  1. 不要选择随堂录制的视频教程,要选择为录视频而录视频录的视频。
  2. 不要选择收费培训班流出的免费视频教程

一个小技巧,如果你觉得视频教程讲得过于详(啰)细(嗦),可以选择加速观看(如1.2倍速),但是一定不要跳跃!宁可加速要不要快进!

其他电子资料

这里所指的其他电子资料包括:在线教程网站、参考手册

在线教程

现在网上的在线教程网站有很多,由于开发技术的火热+低成本,数量多的简直让人眼花缭乱,比如:

在线教程网站适合已有较丰富开发经验的人看,因为多以文字叙述为主,所以内容简洁直奔主题,可以通过教程快速的掌握一门技术,效率非常高。

不过此类网站不适合初学者学习,由于内容过于简洁,只有主线而不全面,基本上0基础跟着教程是学不会的,它会让你产生“我已经会了”的错觉。此类教程是适合那些已有较丰富开发经验的开发者去学习用的,比如已经掌握了JavaScript去学习jQuery、已经掌握了xHTML去学HTML5。

当然,如果某个在线课程面向的是一个很小的知识点并很详细的讲出来,这样初学者也是可以去观看的,比如讲解Sublime Text的配置与插件安装、Firefox配置安装、Firebug的使用等。

参考手册

大多语言都有对应的参考手册,如PHP手册。或者某些非常厉害的在线教程网站也提供对应语言的参考手册,比如比较有名的

w3school 在线教程就是其中之一,不过因为它太有名了,所有出了很多与之类似的网站,比如比较成功的

菜鸟教程

想要通过参考手册来学习一门技术几乎不太可能,相比较学习,参考手册更像是一本字典,是用来查漏补缺而不是用来学习的。

花生十分建议开发者在看完视频教程稍加练习后,过一遍参考手册,尽管它很费时间,但是它可以大大的增强你和某门技术的亲密度。看参考手册的过程中不一定要记住会用每一个方法和属性,有时候你仅仅知道有这么个东西就可以了,等想用的时候可以随时再通过参考手册找到它,这就够了。当然,参考手册语言参考部分是要完全仔仔细细看懂的。

有时候,参考手册并不是看一遍就够了,可以需要第二遍和第三遍甚至第四遍。

书籍

花生不建议未学满1年的开发者买任何的书籍。

指望通过一本书《x语言从入门到精通》真正学会一门语言是不太可能的,书籍与上面的在线课程有许多相似的地方,内容简洁而直白。不过与在线课程不同的是,由于成本较高,大多的书讲的都相当有深度,看起来是面向初学者,实际上一般的初学者是完全看不懂的。

花生就有一个经历,为了学习JavaScript买了本《JavaScript权威指南》,真是噩梦的开始,看起来貌似能看懂实际上完全看不懂,内容晦涩而又深,虽然是从最基础的开始讲的,但是绝不适合0基础的初学者看!

购买书籍一般需要水平达到:刷过参考手册、看在线课程无压力、看视频教程觉得太基础。

书籍大多讲的非常深,花生是在学习1.5年后去看的书,感觉比较不错,因此建议开发者在已经拥有较为扎实的基础后,再去购买对应领域的书籍。

培训班

现在市面上的培训班水平参差不齐,无法进行统一的评价,所以花生在这里面向大多培训机构十(不)分(负)简(责)单(任)的说两句。

培训班可以大大缩短你的自学过程。这一点是确定的,毕竟那么多钱不是白交的…… 一般来说0基础去学是不建议的,因为培训班不会过分的去追求基础。对比基础而言,培训班更加的注重实用,这一点恰好和大学课程相反。过分的注重实用意味着,你在不了解原理的情况下已经掌握了这个技术,他会令你很烦躁,不再去关心基础而是只着眼于实用,这不太利于个人成长。

培训班的培训周期越长越好。时间越长意味着越详细 越基础,这并不是培训班水平不够的原因,而是在基础上花费了很长的时间,这会让你的基础很扎实,对于个人成长也有帮助。

如果你要参加培训班的话,那么花生建议:首先自学一段时间,掌握最基本的基础,然后再去参加培训班。这样性价比比较高,缩短了学习周期的情况下,还拥有了扎实的基础,这么做可以即让培训班保证了现在的就业,又拥有了扎实的基础保证了个人成长。

上面自学+培训班是花生最推荐的学习方式,其次才是纯自学。

对于自学的要点

自学要慢,而且越慢越好。

选择了自学,那么证明了你有充足的时间,因为时间充足,那么我们可以尽可能的学的细致一些,这是为了以后的个人成长,细致基础一些绝没有什么坏处。

多多着眼于一些原理与实现,搞懂每一个常用功能具体是做了些什么,从小功能开始学起,然后用小功能的基础去理解大功能(如果反着来会有大问题!)。

投入一个自己感兴趣的项目,并维护它

利用自己的开发技术去写一个大家比较需求的功能,然后发布给其他人免费使用。想要做到这一点,不仅仅需要你拥有开发技术,还需要你有一定的商业眼光。拿花生来说,花生在学习JavaScript的时候开发了一个基于JS DOM操作的爬虫用来爬取某个网站的数据,并且将它的源码开放给大家供大家使用,截止本文撰写时(2016-5-11)已被使用了上万次,具体可以参考Pxer设计思路(JavaScript爬虫)

尽管Pxer没有给花生带来任何的受益,但是通过自己维护一个项目,花生真正明白了用户的重要性,用户到底想要什么、什么是所谓的用户体验、一个产品应该如何去运营、如何和小白用户打交道等等等等。明白了解了这些观念,那么你就不会是一个死程序员,你会开始站在用户和需求的角度去考虑问题,还要去考虑维护和开发成本等等,这些一定会帮到你很多。

所以,去建立一个项目并维护它吧。

对于极有天赋之人的意见

如果你觉得自己天赋异禀,那么下面的建议会让你充分发挥自己的天赋。

学习计划和大家反着来

一般来说大多的技术都是建立在另一个技术基础之上的,开发者需要按部就班的一步步学习。

如果你天赋异禀,你可以完全反着来!先去学习高层次的东西,然后不停向下迭代,从实现到原理而不是从原理到实现。这有助于大大的提供学习兴趣,并且由于天赋极高,对于底层原理实现也不会有畸形的理解。真正的有天赋的人大多求知欲极强,尽管先接触实现,最后也一定会去弄清原理而不是囫囵吞枣的,这不用担心。

着眼于大众技术的特殊应用

一般来说大多的技术都是有固定的功能,而每一个功能都有特定的场景去使用。

如果你天赋异禀,你可以使用大众技术去干一些特殊应用。比如JavaScript是为了提高用户体验,而你去拿它写插件;PHP是为了处理后台逻辑,而你拿他写爬虫等等等等。

由于你天赋异禀,大众技术实现的大众功能你几乎可以瞬间掌握它,而且是牢牢掌握,这时候可以拿老技术去写一下开天辟地的新东西来增强趣味性,专注于特殊偏门领域成为一名鬼才,这才是一个天赋异禀的人应该做的。

将自己的研究整理成文

如果你发现你的某一个领域的研究比较深入而专业,你可以把它详细的整理成文。这一方面可以分(装)享(B)给其他人,还可以帮助你不断的完善自我。

当你真正把东西整理出来的时候,你才会发现自己还有这么多欠缺。

你可以搭建或申请一个自己的博客(不要QQ空间!)或者去某些高质量的社区(如知乎、简书),将自己的整理的文章发布出来,这样不仅可以倾听大家的意见,还可以为自己争取更多的机会。

典型的谣言辟谣

数据结构+算法=程序

要学编程首先要学会C语言

  • 浏览:1824
  • 评论:2

发表新的回复

404shenyu 2018年12月26日 下午7:37

肺腑之言啊。

回复

陈兰翔 2018年4月6日 上午12:33

我就是被这谣言坑惨了!!!c是精粹,不是用来入门的,也不知道大学为什么要这样教,唉……

回复