自学编程,先学什么语言呢?实际上,编程能做的事太多了,“首先明确自己想要用代码做什么,再明确自己的学习路径、选择起点”是笔者提出的意见。觉得有帮助的话欢迎前往:自学编程先学什么了解更多详情。
高考结束,自己的第一个明确规划就是:学编程。当时不知道编程可以用来做金融决策或科学计算,只是想单纯开发一个“有图形化界面的软件”而已。自然而然,没有任何基础的我也遇到了上面两个同学提出的问题。
大一走了不少弯路,在java、C/C++这两者的门口兜兜转转,也没有什么进步。幸好这世界上有一种叫“数学建模比赛”的东西,为我打开了新世界的大门:几个模型下来,我对自己“写代码的能力”有了不少信心,并且更加关注数据结构这种基础知识,便开始系统学习CS理论。这期间逐渐接触了matlab、汇编、C/C++、java、python、C#、golang、html/css、javascript等等语言(其实语言种类不是重点,重点在于其生态与可用框架)。现在回过头来,跟三年半前的自己和准备自学编程的同学讲一讲心得。
本文的内容概括为两部分:
-
先知道编程能帮我们干什么
-
再明确自己要拿编程做什么
先知道编程能帮我们干什么
编程,其实已经不仅仅是“编写程序”这么狭义了,通过写代码让计算机帮我们做事都可以看做“编程”。这也是为什么,在注重高效率的今天,社会越来越推崇“少儿编程”与“全民编程”。
并且,现在的语言工具(比如python)已经降低了不少编程工作的复杂度,让我们在不了解编译过程的情况下,也能通过几行简洁的代码很棒地完成工作。
因此,我在这里总结一下,编程能帮我们做什么,已经做这个工作需要懂计算机到什么程度:
-
1. 日常办公、处理表格: 我们刷朋友圈时常常见到这种广告:“同事早早下班,工作还被领导表扬,只因为会用python处理excel!”这其实有点瞎扯:一是excel的功能已经够直观便捷、够强大了;二是0基础入门python,肯定要涉及到学习一些数据结构的相关知识,有这个时间,还不如好好看看excel有哪些强大功能。如果你只想用编程处理excel这种办公工作的话:学一学python入门课,再掌握一个类似xlwings的excel处理库就足够了。当然,有这时间,还不如直接学学excel和其中的vba宏。
-
2. 科学计算(运筹/机器学习/数值分析): 现在科学计算几乎难以与“编程”二字分家。做科学计算的人都是很聪明、学习能力很强的人,但其编程能力往往参差不齐,我这里划了三个档次:
-
- 2.1 不需要太多编程能力,重点在于结果而非编程: 很多朋友只是用用仿真软件、用R语言做做统计分析、用matlab做做拟合,他们的工作重点在于输出的结果,而非“编程”这个过程,那很显然,这类同学只需要懂得声明变量、懂得控制语句、能套用网上的“轮子”、会用plot(X, Y, "o")这种很直观的函数画画图,就足够啦。这类同学往往是类似物理、管理、社会学这类学科的从业者,都是很聪明能干的人,我认为在过程中学习,多看看前辈们的工作方式与工具,注重文件管理与编程规范(不要乱起文件/变量名字,也不要乱放文件…),学学github检索与使用,熟能生巧就好。
-
- 2.2 需要一定编程功底,如CV/NLP等ML/DL/OR从业者: 计算机视觉、自然语言处理、深度学习、机器学习、运筹学、线性求解器、启发式算法……这类研究是一定要拿计算机做实验的,并且用编程实现算法的入门并不简单。一样的算法,编程好的和编程不好的用代码写出来,结果、性能、可移植性、可读性、调参的便捷性可能有天壤之别。这就好比艺术学者,心中的构图都是很美好的、理论知识都是很扎实的,但是最终决定作品效果的却是自己使用画笔的能力。对于这类同学来讲,数学、数据结构是重点中的重点,“会用”python这类语言的同时,最好也掌握一下“面向对象的思想”与“函数式编程”,方便我们阅读框架源码;注重自己的编程习惯,配置一个好点的编辑器,持续学习(比如你了解jupyter notebook的快捷键与自动补全吗),咱也不能一直当个“调包侠”呀。有余力则应该去系统地学学计算机课程。
-
- 2.3 大神,从底层开始写算法: 你知道么?我们用python调用的很开心的深度学习框架TensorFlow其实核心都是用c/c++写的哦!不信的话,自己去看源码tensorflow/core/kernels/[1]。为什么用c/c++呢?我估计是为了更好的性能、对计算机算力更充分的利用。我们知道,c/c++是有指针的语言,这增加了编程难度,却也让开发者可以更好地对系统的虚拟空间进行管理。很多主流语言,比如java、python为了降低开发者编程难度,便取消了指针机制。这类人计算机功底必须极其扎实。
-
3. 软件工程师/开发者: 前端、后端、PC端、移动端、Web平台、全栈、网络安全、测试、运维、游戏等等,就是我们常说的“程序员”,工种其实太多了!自学编程的孩子如果是想成为这类工程师,那当然需要系统学习软件专业与计算机专业的专业课;但是我们大部分孩子只是想学学计算机,了解一下而已,因此第3条我们不展开讨论。
-
4. 其他很有趣的事: 日常生活中我们离不开手机、计算机,因此如果能写个“程序”,让计算机“自动”做一些工作,便蛮有趣的。比如,编程爱好者Sarthak agarwal[2]就写了许多python脚本文件,这其中有用自动下载图片、自动管理文件、自动发邮件的。这里,我不得不点明一个误区:虽然人们常说python很方便、强大,但只会python是远远不够做这些有趣的事的。比如,用python下载图片听起来很美好,但是不懂url、不懂网页布局,怎么可能做到呢?python说白了,只是一个方便的工具而已嘛。
再明确自己要拿编程做什么
编程能做什么,要学到什么程度,其实我在上文说的已经比较明白了。
自学编程大概两个阶段:
-
打基础,至少学懂一门语言,推荐拿C/C++入门(为了学到一些指针与面向对象的知识),拿python入门也可,但你会发现面向对象在python教学中可能不被强调,因为python自带的工具已经很强大;不推荐拿java入门,因为java实在是开发者用的语言,其魅力在于接口、程序设计,想拿java入门,不如拿C/C++入门;
-
编程之理,一通百通。第二个阶段,就是多多实践、持续学习,在自己的领域探索下去:
-
如果你要搞数据科学、打数据比赛,就去多用熟悉python中的pandas、sklearn库等等;
-
如果想做线性求解,先找几个简单的java+线性求解器例子动手复现下来,读懂每行代码的作用,在过程中积累;
自学编程先学什么的建议就先讲到这,还有什么问题的话可以前往并关注:编程学习网了解更多详情。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/7684/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料