zoukankan      html  css  js  c++  java
  • 编程不是一种知识,而是一门手艺。

    作者:姚冬

    链接:https://www.zhihu.com/question/27574436/answer/37185893
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    其实很多人学编程都会遇到困难,我觉得其中一个根本原因是他们没搞明白学编程到底是学什么。

    编程不是一种知识,而是一门手艺。

    我们从小到大的学习都是学习知识,流程一般是课前看书预习,上课听讲,下课做作业,然后复习考试。但是学手艺可不是这么学的。

    我们先拿游泳举例,游泳不是知识,而是技能,也可以算门手艺吧。
    需要预习吗?需要上课听讲吗?不需要,因为两岁小孩都能学会游泳,他们连话都不太会说呢,怎么可能听课预习呢。游泳是通过在水里的练习,教练手把手地传授动作,一点一点提高熟练度学会的。

    我们再来看看弹琴,学钢琴一定要有钢琴,音乐基础知识也是老师在练琴间隙传授的,并且一定会结合练习,另外练琴时间是很重要的,必须保证一定的练习量,有些理想远大的琴童练琴时间可以用惨无人道丧心病狂来形容。

    千万别把编程看作知识,计算机科学是知识,但是编程是手艺。
    既然是手艺就要用学手艺的思路去学习。

      以动手练习为主,看书学习为辅,甚至极端点,初学的时候除了看必要的文档都可以不看书,等有了一定编程基础后再去看书,看完书立刻动手编程去验证书上的理论知识。
      练习一定要循序渐进,把手艺分解成几个简单的动作,反复练习直到熟练,然后再把基本动作组合起来练习直到熟练。拿C语言举例,比如从认真写好一个Hello world开始,然后去熟悉 if for while 等基本关键字,然后熟悉字符串操作,内存操作,练习查找 排序 二叉树等基本算法数据结构,然后学习一个小型Framework。。。。
      找个师傅,手艺的一大特点就是自学是很慢的,而且容易走弯路,而有人手把手教要快得多,手艺有很多细节,实际操作经验,需要去体会感受的东西,这些细节书上基本不会有。
      坚持做大量的练习,以代码行数为例,每年50000行左右是比较一般的练习量,有毅力的话可以挑战10万行。(有人说代码行数不代表什么,行数多不见得程序就对,写得好的程序代码很少blablabla,滚,去跟朗朗说去,告诉他其实不用练那么长时间琴。)

    回忆下自己当年是怎么学会骑自行车,学会游泳,学会打篮球的,按照那个思路去学编程,而不是用你学大学课程的思路去学编程。

    记住,编程是手艺,不是知识。

    ======
    最后再强调下,对编程能力本质最好的比喻就是弹琴。但是有了编程能力还不能算优秀的程序员,优秀的程序员是作曲家,他们不仅能想出优美的旋律,并且能弹奏出来,就像优秀的程序员不仅能想出优美的算法架构,而且能把它变成可执行代码。你很难想像作曲的人不会任何乐器。

    很多人的问题是想当作曲家却不肯下功夫去练琴。

    打个预防针,估计有人会举出反例说我就知道某某某作曲家不会乐器(其实真的有)。
    我要说的是,等你成了公认的著名作曲家之后再说自己不会乐器,那你牛逼。
    在成名之前就这么说那是煞笔。

    =======================================================================

    当你还是一个新手的时候,你需要疯狂的积累你的代码量,你可以从基本的问题出发,做一些简单的问题,怎么输入数据,怎么输出数据,然后熟悉各种数据结构,各种常见算法,疯狂的刷题,比如 就是一个很不错的刷题网站,不会怎么办!看答案,了解怎么写,然后自己实现一遍。你可以先从easy难度的问题做起,每一个程序也就20-40行左右,甚至你可以一旦AC,反复提交,以增强自信心,虽然这只是一个玩笑,但是它可以让你提高你对编程的自信,对编程的喜爱,当你有自信的时候,你才能真正的把一件事情做好。当你反复解决一个又一个的问题的时候,你要告诉自己我是个天生的编程者!然后你就可以挑战更高难度的问题,当你积累到10W以上的代码量的时候,你会发现你会有一个质变。一切将变的顺手。当以前要想半天的语句,现在信手拈来。恭喜你跨出了很重要的一步。

    有人问在哪里看答案,这里给大家提供一个看答案的网站,是我觉得比较高质量的答案:LeetCode / LintCode 答案查询
     
    作者:ninechapter
    链接:https://www.zhihu.com/question/27574436/answer/152417898
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    =======================================================================

    1.写博客:可以按几个维度去写,比如,

    #每天一写#,今天学习了哪些新的东西,或者做了什么程序,或者思考了哪些,改进了哪些,都可以记下来;

    #新知识#学习了新知识,可以在博客里写一下;

    #阶段总结#对每个阶段学习的知识进行总结,光学习不思考是不会有很大进步的。还有值得做的就是

    #常犯错集锦#,初期的时候很多地方都容易犯错,把错误的地方都记下来,记得下次不要再犯同样的小错误。


    2.常思考:写博客一个是能够养成自己的一个好习惯,但是写了不看,也是白搭,看了不思考,也是没用,

    所以一段时间要再看一下自己的之前的东西,是不是有的就会有新的理解,

    看一下之前的代码,是否可以进行了优化;

    每学到了一份新知识,就尝试做一些小程序,并不断优化,这些都是方法所在。

    其实不怕浪费时间,可能你想不出来,但是重要的不是那个结果,正是这个过程,你提高了。



    作者:迪公主
    链接:https://www.zhihu.com/question/27574436/answer/130250649
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    =======================================================================
     
     
    有哪些你看了以后大呼过瘾的编程书? - 知乎 https://www.zhihu.com/question/50408698
     
     
     
     
     
     
    留白
    联我:shen5773384##163.com
  • 相关阅读:
    整数
    mysql-5.7.13-win32 安装
    Flex air修改外部xml文件 (转)
    JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
    C#中&和&&的区别
    百度UEditor1.4.3编辑器和asp.net MVC 5结合
    ASP.NET MVC ajax数组,模型绑定问题。
    MEF依赖注入无法在在构造函数中使用的解决办法
    AJaxFileUpload 文件上传<pre>,json字符串为空解决方法
    C#中字符串转换为IPAdress
  • 原文地址:https://www.cnblogs.com/WMCH/p/7838835.html
Copyright © 2011-2022 走看看