编程入门: 自学编程从哪里开始? [初学参考]

自学编程,先学python、java还是C/C++?

——大四学生对于初学者的一点建议

摘要: 自学编程,先学什么语言呢?实际上,编程能做的事太多了,首先明确自己想要用代码做什么,再明确自己的学习路径、选择起点。

在这里插入图片描述

在这里插入图片描述

高考结束,自己的第一个明确规划就是:学编程。当时不知道编程可以用来做金融决策或科学计算,只是想单纯开发一个“有图形化界面的软件”而已。自然而然,没有任何基础的我也遇到了上面两个同学提出的问题。

大一走了不少弯路,在java、C/C++这两者的门口兜兜转转,也没有什么进步。幸好这世界上有一种叫“数学建模比赛”的东西,为我打开了新世界的大门:几个模型下来,我对自己“写代码的能力”有了不少信心,并且更加关注数据结构这种基础知识,便开始系统学习CS理论。这期间逐渐接触了matlab、汇编、C/C++、java、python、C#、golang、html/css、javascript等等语言(其实语言种类不是重点,重点在于其生态与可用框架)。现在回过头来,跟三年半前的自己和准备自学编程的同学讲一讲心得。

本文的内容概括为两部分:

	1. 编程能帮我们干什么
	2. 自己要拿编程做什么
  • 一.先知道编程能帮我们干什么

编程,其实已经不仅仅是“编写程序”这么狭义了,通过写代码让计算机帮我们做事都可以看做“编程”。这也是为什么,在注重高效率的今天,社会越来越推崇“少儿编程”与“全民编程”。

并且,现在的语言工具(比如python)已经降低了不少编程工作的复杂度,让我们在不了解编译过程的情况下,也能通过几行简洁的代码很棒地完成工作。

因此,我在这里总结一下,编程能帮我们做什么,已经做这个工作需要懂计算机到什么程度:

  1. 日常办公、处理表格:

我们刷朋友圈时常常见到这种广告:“同事早早下班,工作还被领导表扬,只因为会用python处理excel!”这其实有点瞎扯:一是excel的功能已经够直观便捷、够强大了;二是0基础入门python,肯定要涉及到学习一些数据结构的相关知识,有这个时间,还不如好好看看excel有哪些强大功能。如果你只想用编程处理excel这种办公工作的话:学一学python入门课,再掌握一个类似xlwings的excel处理库就足够了。当然,有这时间,还不如直接学学excel和其中的vba宏。

  1. 科学计算(运筹/机器学习/数值分析):

现在科学计算几乎难以与“编程”二字分家。做科学计算的人都是很聪明、学习能力很强的人,但其编程能力往往参差不齐,我这里划了三个档次:
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/。为什么用c/c++呢?我估计是为了更好的性能、对计算机算力更充分的利用。我们知道,c/c++是有指针的语言,这增加了编程难度,却也让开发者可以更好地对系统的虚拟空间进行管理。很多主流语言,比如java、python为了降低开发者编程难度,便取消了指针机制。这类人计算机功底必须极其扎实。

  1. 软件工程师/开发者:

前端、后端、PC端、移动端、Web平台、全栈、网络安全、测试、运维、游戏等等,就是我们常说的“程序员”,工种其实太多了!自学编程的孩子如果是想成为这类工程师,那当然需要系统学习软件专业与计算机专业的专业课;但是我们大部分孩子只是想学学计算机,了解一下而已,因此第3条我们不展开讨论。

  1. 其他很有趣的事:

日常生活中我们离不开手机、计算机,因此如果能写个“程序”,让计算机“自动”做一些工作,便蛮有趣的。比如,编程爱好者Sarthak agarwal就写了许多python脚本文件,这其中有用自动下载图片、自动管理文件、自动发邮件的。这里,我不得不点明一个误区:虽然人们常说python很方便、强大,但只会python是远远不够做这些有趣的事的。比如,用python下载图片听起来很美好,但是不懂url、不懂网页布局,怎么可能做到呢?python说白了,只是一个方便的工具而已嘛。
再明确自己要拿编程做什么
编程能做什么,要学到什么程度,其实我在上文说的已经比较明白了。

  • 二.自学编程大概两个阶段:

第一个阶段:
打基础,至少学懂一门语言,推荐拿C/C++入门(为了学到一些指针与面向对象的知识),拿python入门也可,但你会发现面向对象在python教学中可能不被强调,因为python自带的工具已经很强大;不推荐拿java入门,因为java实在是开发者用的语言,其魅力在于接口、程序设计,想拿java入门,不如拿C/C++入门;
编程之理,一通百通。
第二个阶段:
就是多多实践、持续学习,在自己的领域探索下去:
如果你要用搞数据科学、打数据比赛,就去多用熟悉python中的pandas、sklearn库等等;
如果想做线性求解,先找几个简单的java+线性求解器例子动手复现下来,读懂每行代码的作用,在过程中积累;
如果是兴趣驱动,莫不如像我一样,从计算机专业课学起…
etc.
我的计算机自学笔记在:https://github.com/PiperLiu/CS-courses-notes;

转发注: 本文转发时经过了重新整理.
原文: https://piperliu.blog.csdn.net/article/details/103852093?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.control

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值