程序猿竟然是这样炼成的!

2018年03月06日 澳洲地产JennyYangRealty


在信息化发展的大力推展下,IT行业成为时代的宠物,对于IT行业,内行人看到的是前途,外行人看到的是光鲜,不仅是高收入的群体,并且拥有优质的办公条件,真所谓名利双收。历年来荣登榜首的全球最佳雇主,往往少不了IT行业。在这样的一个背景下,很多外行也想进入其中,俗话说,万事开头难。只要入门,一切问题都可以迎刃而解,所以一些培训机构推出免费试听优惠,这都不足为怪,当然行业毕业让人家了解了之后人家才有决心去学习,不过,那些都是一些片面的东西,没有系统的梳理,所以效果并不大,甚至是花了一两万,几个月之后出来竟然发现自己学的都是些基础,远远满足不了企业的需求,这样可以说浪费的不仅是金钱更多是自己的宝贵时间。

 网络上流传的编程学习方式有:

  1. 看书(这是最容易想到的方法)

  2. 观看视频教程

  3. 阅读官网文档

  4. 读源码

  5. 到大学蹭课或者报名培训(不知道还算不算自学,没交学费都算吧?)

但总结来看,大学蹭课和培训并不一定有合适条件,且不符合自学的气质;观看视频教程,前辈们觉得比较low,不过如果真的有耐心,静下心来看完一整期视频,还是会有效果的;阅读官网文档和源码,这不适合初学者。总得来说看书算是比较中肯的方法,至于看什么书呢,前辈推荐了《C Primer Plus》,据说是学习C语言的经典之作。

好吧,不再纠结,直接啃这本大部头,虽然有人说看原版好一些,但是实在能力有限、还是看中文版吧。一口气花了一周时间读完这本书,果然是经典,变量、语句、条件判断甚至指针都知道怎么回事了。

 

于是就可以按照书中的说法实践一下了,于是打开了记事本,折腾很久装了GCC,把书上的第一个例子抄了下来,在控制台的小黑窗输出了“Hello World”,成就感满满。决定上手写点高级的的东西一试身手,合上书。咦,为什么会报错?哦,原来少个分号。不禁陷入思考:为什么学了两个月还是只能在这个黑窗口算算秋水仙数?网友还说要看官网文档、要读源码、要看英文原版,我一样都不能做到,我一定是能力不够,编程果然是天才做的事情……

 

正题

这样的故事是初学时会经常遇到的,但其中的纠结却是自学者或多或少都经历过的。实际上,IT从业者并不像传说中那样需要天才般的智商,要点在于能否找到合适的入门途径,再加上一点点坚持和思考。比较可惜的情况是一些人没能找到适合自己的学习方法,并在纠结和碰壁后失去信心,然后沮丧的认定自己并不适合干这行。学编程很多时候就是一个趟坑的过程,但不是每一个坑都有必要趟,写这篇文章的目的是希望能够帮助初学者尽量少趟一些坑。



确定需求 想要做什么

总的来说,编程作为IT中不可或缺的重要组成部分,是初学者最头疼,也是最难啃的一块。先认认真真的学习一门语言,就会对整个计算机行业有一定的了解,比如,学习微软的就先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。学会了VB,就基本上可以了解微软基础的开发流程。学习HTML + CSS,这是建网站的基础,虽然还有很多编译语言都可以做出网页,但HTML无疑是最简单有效的,学习了HTML,就可以了解网站的构建,深入一些可以了解数据库从而延伸到算法,云等等。所以,在入门时,想好要学什么很重要。

 

打好基础

学编程要具备一定的基础,总结之有以下几方面: 

1)数学基础从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。

2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。   3)选择一种合适的入门语言面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类:

  • 本地开发应用软件开发的工具有:Visual Basic Delphi VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro Oracle Developer Power Builder 等。

  • 跨平台开发开发工具如 Java 等。

  • 网络开发对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP ASP JSP ISAPI NSAPI CGI 等。以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。选 VB 作为入门的方向对出学者是较为适合的。



IT世界的地图

初学者遇到的一个典型问题是对IT世界没有一个大的图景。比如大多数的Java书籍,教完你基础语法知识和秋水仙数的求法后就结束了,并没告诉你接下来能干什么。我曾经为此感到非常困惑,学完Java SE后做了一个非常简陋的GUI demo,就失去了后续的Java学习方向,带着对Java的偏见,这成为了我一段令人沮丧的学习经历。关于这个话题一本书可能都不够,简单来说,我尝试从计算机科学知识和技术实践两方面来聊聊成为一名IT工程师需要具备哪些东西。

 

计算机科学基础

首先初学者要具备一些非常基础的知识,这些知识在你踏上工作岗位后能被实际的用到,比如计算机运行原理、高等数学、网络的传输、常用数据结构和算法等。这部分属于计算机科学,也是应该被计算机专业本科课程涵盖的,所以在大学本科学习的只是,对于计算机科学的自学来说,也是非常重要的。

 

这里我罗列了一些计算机专业的学生一般需要学习的课程,当然每个学校专业设计都不一样,甚至采用的教材名字也不一样,仅供参考。大学计算机科学课程往往包括:《高等数学》、《离线数学》、《电子电路》、《数据结构》、《程序设计》、《计算机组成原理》、《编译原理》、《计算机网络》、《软件工程》、《数据库原理》等。有些学校会有一些额外的课程,例如《通信原理》、《汇编语言》、《线性代数》、《C语言》、《Java 语言》等。

 

 

尽管IT行业知识更迭非常快,但是基础知识并不容易过时,因此有大量的资料可以选择。可以选择从计算机经典丛书系列开始,比如佛罗赞和莫沙拉夫的《计算机科学导论》,甚至可以阅读一些计算机科普类读物例如《穿越计算机的迷雾》。

 

从知识到实践

除此之外,还需要了解实际应用于设计软件或者开发网站中的实践类知识,包括某个特定语言以及周边的库、框架和工具等。我们可以把特定需求中用到的语言、库和框架以及其他的工具称为技术栈,在技术选型上通常也是被这样考虑的,HR常常会根据技术栈来寻找需要的工程师。比如需要学习SSH 三大框架和JavaJava技术栈;为服务器web开发而生的PHP技术栈;在移动开发领域流行的IOS、安卓技术栈等。当然这里面有一些重合和共用的技术也需要学习,比如版本管理器GitSVN就是每个合格的工程师需要去学习的。

 

换句话说,大学课程主要定位在上面说到的计算机科学基础知识,而市面上的培训机构主要是告诉你在怎么在实际工作中运用,所以大学和培训机构都有他们的价值。

 

想要更加详细的了解这部分内容,这里有一些开源的技能图谱可以参考:

 

如何挑选你的兵器?

在介绍完计算机领域的大致图景后,就需要选择一门合适的编程语言,一个较为形象的例子是把编程语言比喻成兵器,因为我们深知编程语言对于工程师而言是实实在在的工具,我们不是为了学它而学,学编程不仅仅是学语言特性,一般来说我们也不用知道赋值语句像“茴香豆蔻”的“茴”字有四种写法。

 

当然语言之争从来没有停止过,如果把编程语言比喻江湖武器的话十分有趣。

 

  1. C语言是M1式加兰德步枪,很老但可靠。

  2.  

  3. C++是双截棍,挥舞起来很强悍,很吸引人,但需要多年的磨练来掌握,很多人希望改用别的武器。

  4.  

  5. Perl语言是燃烧弹,曾经在战场上很有用,但现在很少人使用它。

  6.  

  7. JavaM240通用弹夹式自动机枪,有时它的弹夹是圆的,但有时候不是,如果不是,当你开火时,会遇到NullPointerException问题,枪会爆炸,你就会被炸死。

  8.  

  9. _JavaScript是一把宝剑,但没有剑柄。

  

老实来讲IT行业的最终目的是交付可用的软件,编程语言也是适应市场的。这对于初学者或许有些残酷,在工作中我们发现最好的语言是用来处理工作任务或者构建合适的应用,并不是出于爱好或者某种Geek精神。

 

对于初学者而言,在选择合适的入门语言时至少需要考虑两点:

 

是否能适用于构建你想要的应用。如果你的目标是创建一个运行在IPhone上的APP,那么最好选择 Object C 或者 Swift,学习web开发可以选择PHP 或者JAVA。实际上我们仍然可以用汇编做出网页,但是这样做成本高昂。

是否容易学习,在满足第一点的条件下请尽量选择容易学习的语言。容易不仅仅指语法简单,包括环境搭建、部署等都需要考虑在内,以及能不能容易找到好的学习资料,因此尽可能的选择主流语言。

别忘了非常重要的一点,学习编程语言还包括平台提供的API,比如Win 32 之于C++/C#/VB,以及周边的库和框架(这些库、框架和工具能在上面说的技术图谱中找到)。IT历史上甚至出现框架和库引领编程语言走向的情况:JQuery Angular 改变了前端开发的思想; Rails 抢走了Ruby的名气;而SSH三大框架一度代表了Java世界。

 

最后为刚入门的初学者们整理了一个流行编程语言和用途的表

另外还需要注意的是开发工具,可以选用IDE和有代码提示的编辑器,但尽量不要在这上喋喋不休,这就像用来盛放你锋利兵器的架子,用着顺手就行,也不推荐使用纯文本编辑器,这看起来像赤手空拳。推荐一些编辑器和IDE

 

挑选合适的资料和有效的阅读

对初学者而言,好的视频教程任然是上上之选,虽然我已经听到不下5个人声称是靠阅读官方文档或者看源码学会编程的,而且认为观看视频教程见效太慢。但这个思想对初学者很危险,不得不承认阅读文档和源码能更准确找到自己想要的信息,这对深入技术原理非常有用,但视频能比文字传达出更丰富的内容,有更直观的演示和细致的讲解,我想没有比这个更适合初学者了。

 

除了上面提到的精品课程和慕课教程,国内有像网易云课堂,国外有lynda.com和W3 shcool这种在线学习视频网站,甚至在优酷和土豆都能找到足够的教程资源。

 

如果选择了阅读技术类书籍,我们来聊聊怎么有效的阅读一本技术书籍。

 

IT类书籍和读考试类书籍的方式不同,初学者需要选择更接地气、并且能告诉你最终能做出什么案例的书籍。你不需要通读整本书,而是需要搭建好和书中版本一致的环境,然后把书中的每行代码敲入电脑,观察这些代码怎样被运行,在遇到问题时去请教朋友或者到搜索引擎中寻找解决办法,直到示例程序能被正确运行。

 

可能一个月才能读完一本书,但慢点并没什么坏处,敲过一遍的代码才能算是你的,否则永远存在于纸上的代码清单中。对于关键的概念和知识点,可以在阅读的同时做一些笔记,去尝试使用思维导图来做你的笔记吧,这让你的笔记跟上你的思考,并形成一个知识网络。 

编程学习tips

1、先照书上的题目写,题目的设计是有道理的巩固基础知识。

2、找数学题,写个小程序解决,熟悉算法和基础函数

3、自己出题目,小一点的,如自编资源管理器、自编写字板之类,练习WINDOWS下的编程。

4、结合身边的事,找个中等课题,或看别人的程序,自已想办法实现。

5.把教材中的例子,自己仿照着写一遍,上机运行,看结果.要知道,任何产品都是有例子的,有机结合或仿照。

6.从自己熟悉的事情入手,如成绩统计,编制一段程序,完成一个功能.然后再完善。

7.要反复破坏代码,从破坏中寻找代码的规律。

8.必须经常反复上机练习。


自我激励

自学无疑是寂寞的。编程学习耗时较长,如何保证在这个阶段能坚持下去?

 

我们知道很多人都能对游戏产生强烈的兴趣、愿意为之投入时间,这其中的秘密就是游戏的奖励规则。杀死一个怪物就能得到一些金币,通过完成任务获得满足感,通过关卡的设计产生持续吸引力,进而形成正向的反馈。

 

其实学习编程也一样,实现一小段程序并运行,足以让人感到成就感和满足,借鉴这个简单的心理学技巧,定期给自己设定一些有实际意义但是不太难的目标和任务。太难会让人失去耐心,太简单又很无聊,最好设定一个跳起来刚好摸得着的任务。每完成一个目标就给予自己奖励,可以是完成任务的成就感,也可以是其他的物质奖励。

 

这个时候一个代办记事的清单就可以帮上忙了,可以是一个to do list的软件,或者自己手写一张卡片贴到墙上,关键在于不要忘了在任务达成后给予自己适当的奖励。

那如果真的遇到一些麻烦的任务呢,如何顺利解决而不至于丧失信心?笛卡尔在《方法论》一书中告诉了我们研究复杂问题的方法和步骤:

 

尽量将其分解为多个比较简单的小问题,一个一个地分开解决

将小问题从简单到复杂排列,先从容易解决的问题着手

子问题被解决后,进行联调测试,看是否能协同运行

在敏捷开发这种工程思想中我们正是这样做的,我们需要把业务需求进行拆分然后评估工作量,不仅可以直观的看到任务进展,手上的工作也不会看起来庞大得难以完成。

 

最后多说几句

非科班出身的工程师入门是有一定痛苦的,不像武侠世界里面的名门正派弟子,也没有机缘遇到骨骼精奇的世外高人,如何选择合适自己的学习方式并自我管理是很重要的一方面。没有任何Low的学习方式,只要直接而又高效,而且要能达到我们的目的就好。

 

另一方面是如何上桌,吃上编程这碗饭。学习的成果如果无处施展便成为屠龙之技,参加一些开源项目和一些公益活动,谁不喜欢一个热心的人呢。也可以尝试去实现自己的一些idea,当做一个小项目来开发,有了一些项目实践后去找一个公司实习会容易的多。当然,也并不是说,编程就是计算机科学的全部,除了程序猿之外,前端设计,动画设计等等工作都不会要求有太高的编程能力,但前提是要有出众的设计能力。不过现在市面上大把大把的编辑器可以用,如果只是简单的页面设计,基本的HTML+CSS就足够应对了。

 

不管有没有经历过从初级开始入门这一过程,矫情一点来说是有一些曲折,但是“聪明”从来不是这个行业的门槛。引用流行于知乎的一句老话“以大多人的努力程度,还轮不到拼天赋的程度”,在Thoughtworks有大量优秀的工程师,从他们身上我们都能看到聪明不是学习编程成功的关键,坚持和勤于思考才是。


精益地产 整理发布





关注微信公众号: 澳洲地产JennyYangRealty

www.jyrealty.com.au 邮箱:[email protected]

长按或扫描二维码可识别订阅 |


收藏 已赞