今天看到了篇文章(菌菌:链接已死),不尽让我感慨良多。现在的编程语言,以致编程世界,被诸君有意无意的神化了。
我只会C++,虽然我写过一些脚本语言和本机语言的编译器,但基本上我会的就只有C++,用的也只有C++。我并不觉得我很乏味,因为会一门编程语言就够了,无论他是什么。我不会python,但是你要我用python的时候,我可能在十几分钟内看看语法,查看API并写出相关的程序;我也不会php,但要写网页,我还是看看语法,查看API就写出来,十几分钟的事。如果我觉得有爱,我还会实现这些语言的编译器,这对我是一件很容易的事情(毕竟写了好多个了)。
可见,编程语言只是工具罢了,纯粹的工具;学会一门语言并不像你想的那么难;看看他的简明教程和语法、再看看他的例子,我相信你足可以学会这门语言。C++虽然是一门庞大的语言,但绝不是现在人们口中谈虎色变的东西,他是很靠谱的编程语言,无论是性能,库、还是IDE都是齐全的。
也许你会问现在不都是说用vim、notepad++、emacs什么的吗?Visual Studio是不是俗气了些,那是初学者都不理会的东西吧;IDE什么的别开玩笑了,我又不是大一的小孩。
也许你会问,Windows?Linux和Mac才真正的是酷的吧,现在只有被修电脑的妹子才用Windows吧。也许你会问,很多很多诸如此类,被误导的问题,原因是现在的编程语言和编程世界被神化了;本来的朴质的工具,被渲染上神秘主义的面纱,让众人觉得那些无关痛痒的东西是我们需要的。
我可以负责任的告诉你,我的想法是:编程语言是什么都无所谓,编程工具是什么也都无所谓,编程所在系统是什么根本没关系的好吧;真正有用的是算法和设计模式。
算法和设计模式才是编程的根本。只要明白这两个,其他的都是浮云般的存在。
算法和设计模式是独立于上述的一切而存在的。无论你用C++还是python,或者你用javascript,算法该咋实现还咋实现,他是程序能力和效率的保证;而设计模式也同样的道理,无论你用Linux,还是GItHub,只要明白设计模式,都能设计出很规范的、相对很健壮、有利于后续开发的程序。
大学中说:“事有始终,物有本末,知其前后,则近道矣”。然而,现在人在给初学者的意见,甚至是自己在学习的时候,不但不从根本的算法和设计模式入手,反而扯出一堆皮毛的东西,还形成了阵营,相互挖苦和嘲笑,这本身不是很奇怪的么!让那些本来应该得到重视的智慧被无视,让那些无关痛痒的技巧被学习,从古至今像这样而成功的人,我没有听说过。
如果你是初学者,现在迷茫于,或者被迷惑于这些建议的话。我劝你沉下心来,不要被这个时代的喧嚣和浮躁所感染。你需要做的是:
1.把基础的计算机机构学好(计算机组成原理、体系结构)。
2.把数据结构学好,要把一些比较高级的数据结构也要掌握,每种数据结构,自己都动手去做一下,形成一个自己的数据结构小类库,以后绝对会对你有用。
3.把操作系统的基本知识学好,不是Linux,也不是Windows,是那些并发、调度、缓存机制、文件系统等算法性的东西,这些东西在以后绝对会用得上,并不是在你实现操作系统的时候,是在你写一些稍低层的结构的时候。
4.算法,这东西可以说是无穷无尽的。你首先把基础算法弄明白,比如动态规划、贪心、分支限界此类的经典算法。然后随着你的兴趣和方向去学更多有意思有用的算法。比如你喜欢智能、自然语言处理这些,你可以去尝试看看机器学习的书,然会动手实现一个机器学习小类库。这个类库你未必用,你未必能让别人用。写他的意义最重要的在于理解那些算法。
5.至于设计模式。算法是超脱的,是理性的,说白了就是不是个程序。但要让计算机执行,必须化为程序,那就必然用到编程,无论是什么语言,如果不会设计模式,即便是你对这门语言再熟悉,也不可能设计出优秀的程序。所以设计模式在程序设计的时候是必须的,也是很重要的。
6.蔑视那些沉浸在神秘主义编程论里的人吧。在明白了上面那些后,你自己就可以实现编程语言、编程工具甚至是编程用到的 操作系统。然后告诉他们:too young,too naive.