零基础同学自学编程的正确姿势

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 编程这件事现在有点热门了,经常能在网上看到有人问该怎么学编程。不用说,问这种题的同学都是对编程没啥经验的,有不少甚至是完全零基础的。要搞清该怎样学编程,先得问自己一个问题:为什么要学编程?学来想干什么?

 

🍁博主简介

       🏅云计算领域优质创作者

       🏅新星计划第三季python赛道第一名

       🏅阿里云ACE认证高级工程师

       🏅阿里云开发者社区专家博主

✒️博主微信:15575411187

💊交流社区小鹏linux(个人社区)欢迎您的加入!

编程这件事现在有点热门了,经常能在网上看到有人问该怎么学编程。不用说,问这种题的同学都是对编程没啥经验的,有不少甚至是完全零基础的。

要搞清该怎样学编程,先得问自己一个问题:为什么要学编程?学来想干什么?

道理很简单,因为编程语言五花八门、编程知识丰富浩瀚,专业人员都不可能穷尽,所以要根据目的来选择学习内容。

这个贴子主要是给没打算成为专业程序员的同学看的,所以先看这类人群的学习目的,大部分在网上问如何学编程的同学应该都是这种状态,至少目前一定是(也许学会了之后有可能向专业程序员方向发展)。

这类人群的主要目的,应该是能通过编程提高工作效率,让日常工作更加自动化。确实有相当多日常事务如果使用程序来解决是非常轻松的,而手工去做就非常麻烦,比如把一堆Excel表格合并起来、用花名册生成员工卡片表格等等。街上有很多培训班在鼓吹学完XX语言后工作速度一日千里云云,这当然会令很多职场人士心动。

这种目的,需要学习两层内容:

1.程序的基本逻辑

这是几乎所有程序语言都会有的内容,比如变量、分支、循环等等。不理解这些,几乎是什么程序都不可能写得出来。不过这部分内容并不复杂也不算很多,有Excel公式使用基础的同学,稍加努力就可以学会了。而且,几乎所有程序语言在这方面的能力都很接近,学会一种再去看其它种也很容易,甚至大部分程序语言使用的关键字和语法规则都很像,容易举一反三。

但是,只学会这一层内容,我们只会做一些中小学的算术题,比如解个鸡兔问题、分解个质因数什么的,练练脑筋没问题,对日常工作的协助几乎毫无用处。

不幸的是,面对非专业人员,很多教程书籍甚至培训也只教到这里(或者说只能教到这里,看到后面就明白了)。

要想学以致用,还必须学习第二层内容:

2.结构化数据及其运算

希望编程来解决的日常工作,其实也就是处理手头的数据,而日常工作中面对的数据,绝大多数都是Excel表格或者能填入Excel表格里的数据,这种数据有个学名叫结构化数据。必须要学会结构化数据的概念以及常见运算,比如表、记录、字段、分组、连接等等,懂了这些才可能真正应对日常工作。结构化数据通常都是批量出现的(表格里通常会有很多行数据),这样理解结构化数据时还需要熟悉集合相关的概念和运算。

日常表格数据处理任务都是些啥,可以看这里 http://c.raqsoft.com.cn/article/1611022287740 感受一下。

再说一遍不幸,和第一层基本逻辑会有无数的课程在讲述的情况不同,面向非专业人员的教程很少涉及结构化数据的知识。大概只有数据库开发的同学才会专门去学习这些内容,大概也只有数据库课程才会系统地讲述这些东西。但这玩意儿却是日常工作的基础,而且也没那么难,非专业人员也能掌握。比如你是不是经常用Excel做筛选、汇总甚至也会做连接(这词可能不懂,其实就是VLOOKUP干的活),但没有系统学习的话,碰到复杂些的情况就会糊涂了。

这两层知识都掌握之后,非专业人员就真地可以得心应手地对付日常工作了,工作效率嗖嗖的。

说完非专业人员,再简单说说希望成为专业程序员的同学,其中有两类人群在编程时也是以上面这两层知识为基础的(主要是第二层,第一层是所有程序的基础,就不用说了)。

1.数据科学家

这类人群面对的数据大部分也是结构化数据。当然,数据科学家更重要的任务是做算法建模型,这些工作也是用结构化数据,但涉及的运算和上面讲的表格数据运算不太一样了,一般不会再称为结构化数据的运算了。不过,算法模型的工作量通常只占二到三成,数学科学家的大部分时间都在准备数据,而这个工作主要运用的就是上面说的第二层知识了。

有很多数据科学家只熟悉算法模型,并不太熟悉结构化数据的常规运算,结果准备数据的效率很低(代码写得慢,程序执行也慢),耽误很多时间。掌握结构化数据知识不会让你的模型建得更好,但能让你有更多时间来搞算法。

2.开发行业信息系统的程序员

这大概是最广泛的程序员群体了。这些人天天要折腾数据库,特别是要做报表统计工作的那部分人,全部都是在搞结构化数据。掌握完善的结构化数据知识之后,设计运算和处理的方法要顺手得多。不过,这个人群应该会认真学习数据库知识,也就会把这一课给补上了。

有没有编程人员不需要掌握这第二层知识呢?

有的。反而那些很专业的系统程序员(做操作系统、网络传输),或特定领域的算法工程师(视频音频等),对结构化数据的知识要求比较少。不过,这类人群属于重度编程人员,根本不会来看这个贴子,所以用不着理这群人。 所以,能来看这个贴子的同学,几乎都是需要这两层知识。

知道了该学什么,然后就是怎么学,这里首当其冲的一个问题是,学哪种程序语言?

对于第一层知识,理论上应该选择余地很大,甚至是选什么都可以,因为这是所有程序语言都有的内容。那么只要找哪种程序语言擅长处理结构化数据,这样方便学习第二层知识,而且也可以学以致用。

道理上是这样,但别忘了现在面对的是零基础同学,不能搞出太复杂的环境配置,那同学们会晕掉的。零基础同学需要即装即用,甚至就不用安装更好。

早期(30几年前)机器上都有BASIC语言(我们都是当年学过谭老师那本著名的书),确实是不用安装直接可用的,但是搞不清为什么现在都没有了,也说不清这是进步呢还是退步呢。

现在不需要安装的语言也有,主要有两种,一个是浏览器会都会自带的JavaScript,另一种是有Excel自带的VBA(Office组件都有)。但是,JavaScript功能比较专一,学会了也干不了啥事,没啥意思;VBA好很多,但结构化数据处理的能力也有限。而且关键是,这两种东西虽然免安装,但真要用起来,得理解浏览器和Excel内部的许多概念(专业术语叫做对象),这些东西比程序逻辑本身还难,其实不适合初学者。

有时候很怀念当年的BASIC语言。

满大街都是培训班的Python怎么样?看上去很美。 如果用只来学习第一层知识,Python可以说基本没问题,除了没有象样的中文版会制造一点点小麻烦外,其它基本没障碍,只安装基础功能包并不困难,在开发环境中写代码运行也问题不大。

但如果来学习结构化数据的话,对于大多数非专业选手来讲,可以踏踏实实地说:你就学不会!更谈不上学以致用。

原因有三:

1.Python用来处理结构化数据需要有一个叫pandas的开源包,这东西可不是直接被装进Python安装包的,你得自己再下载安装,过程也没有那么简单了,要配一堆让初学者晕死的东西。当然还可以借助一些第三方的程序来协助安装,但这些第三方程序本身的安装又是个问题,启动起来又有一堆工程环境配置(人家设计出来是做大型应用的)让人不知所措。

2.关键问题在于,pandas本来就不是为结构化数据设计的,它并不是我们熟悉的表格(一行行数据的集合),而是个矩阵。用来处理结构化数据时,做些过滤合并这些简单运算还好吧,碰到分组有序等复杂一些运算,就会让初学者摸不着头脑了。而且它的设计还不一致,集合就有很多种,各有不同的语法,基本上靠死记硬背,到处找例子,很难举一反三。Python的不适应,这里有更详细的解释这样的 Python ,你学得会吗? - 乾学院,前面列的那个日常表格数据处理的目录中,有相当一部分问题用python写起来都很困难。

3.还有调试,你不可能一下子就把代码写对,调试对于学习程序语言也是特别有用的工具。Python开发环境的调试功能本来就不太好,pandas又不是Python的原生内容,调试就更费劲。

Python根本就不是面向非专业人员设计的语言,对于非专业人员来讲,Python的强大和方便,只存在于培训班。把人忽悠去了,学完第一层就结束了。日常工作中能用Python干点活的,基本上都是专业人员了,你很少见到周围有什么人在用Python倒腾Excel(要搞也是简单格式的Excel做简单处理),Python真正的使用者都是重度专业人员(主要是搞人工智能的那群人)。

Python都不行,那其它还有啥?

Java、C/C++这些就不用提了。面向对象本来是个高级玩意儿,不适合初学者去理解;结构化数据处理能力却几乎为0,学了也用不起来;开发环境还搞得很复杂,毕竟这些东西是让专业人员来搞大型软件的,复杂有复杂的道理。

话说有些中学作为计算机启蒙课在教Java,真是匪夷所思。

SQL呢?其实做结构化数据处理还不错。这是一个奇葩,可以不用学第一层而直接跳第二层(所以我们前面都说“几乎”,没说死),不用理解变量循环这些概念也能做出还挺复杂的查询。

SQL的问题是,基本上只能在数据库中运行,而安装配置一个数据库又是个专业的事情了,这又把人挡住了。而且,就算学会了,以后你要算算Excel文件,还得先给倒腾进数据库,烦死个人。

说来说去,都不合适,那岂不是没有了?

老实说,如果看这几个主流的程序语言,真地是这样。这些程序语言都太难了!而够简单的又没什么用。

也正因为如此,虽然编程概念炒得火热,但零基础的非专业人员始终用不起来,不停地有人问该学啥。这事,开再多培训班也没有用,培训班又没有能力去改进或发明程序语言。这本质上是没有米的问题、不是会不会煮的事。

这个世界上大概只有SPL是适合零基础非专业人员的程序设计语言了。

作为程序语言,SPL有完整的程序基本逻辑(第一层知识);SPL全名是Structured Process Language,发明它就是为了对付结构化数据的,其结构化数据处理能力超强,可以说当前程序语言这方面能力最完整的,远远超过Python和SQL。分组连接有序等运算、甚至大数据都不是问题(Python碰到大数据就歇了,SQL碰到有序运算会让人晕死),精心设计的语法易学易通;直接计算Excel文件,还能对着文件执行SQL(SPL提供了SQL大部分能力,学SQL可以不用安装数据库);一键式安装,特色网格代码很容易调试,中英文双语版本,...。还有很重要的,它开源免费!

不过,SPL也不是为了初学者特意发明的,而是为了解决SQL难写和SQL跑不快的问题。但真用起来会发现,它的体系简单易用,很适合初学者来学编程,关键是真能学以致用。

这里有SPL程序设计图书 http://c.raqsoft.com.cn/article/1607914978450 ,其中就有一些可以实用的例程,这里还有更多实用的例程 http://c.raqsoft.com.cn/article/1649301821440

学完了SPL,绝大多数日常工作都不在话下了,到乾学院可以找到很多用SPL处理日常数据任务的例子。

如果想把Excel控制得更细致一点,可以再学点VBA,毕竟它是Excel的原生语言,有些本事是外部的程序语言无论如何也没法拥有的。可以用VBA来调用SPL,弥补它结构化数据处理能力不足的问题。

非专业选手,到此就够了。

最后再说说专业选手可能的发展方向:

1.继续搞SPL。

SPL还适合行业应用软件中的计算(其实大部分也是结构化数据计算,而SQL对于复杂运算并不方便,而且有时候就没有SQL可以用),以及大数据计算(这需要学习不少高性能算法,这是真地有点难了)。

2.Python

Python是个面向专业人员的语言,它拥有大量的人工智能算法库,这方面除了MATLAB和SAS这类卖得很贵的东西外,基本上无其它语言可及了。如果立志要当数据科学家,目前看大概率是要来学Python的。

3.SQL

数据库开发还是离不了SQL,虽然它的计算能力不够强,但兼容性好,到处都是。学了SPL后再理解SQL的运算就太容易了。

4.Java,C#

目前行业应用大都是Java和C#开发的(Java更多)。这时候就要理解面向对象的东西了,这是SPL里没有需要再认真学习的内容了。

5.JavaScript

浏览器里的开发主要还是这东西,它的语法很简单,难点在于要理解浏览器和网络本身的很多机制。

6.C/C++

这种资深程序员干的系统级开发的事情,轮不着这个贴子来说了

SPL资料

    相关实践学习
    基于MaxCompute的热门话题分析
    本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
    SaaS 模式云数据仓库必修课
    本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
    目录
    相关文章
    |
    3天前
    |
    算法 程序员 开发者
    从小白到专家:我的编程自学之路
    【10月更文挑战第30天】在数字时代的浪潮中,掌握编程技能已成为一项宝贵的财富。本文将分享我从一个对代码一窍不通的小白成长为一名能够独立解决问题的程序员的心路历程。通过真实的经历和感悟,我将揭示如何利用网络资源、社区交流和个人项目实践来提升编程技能。无论你是编程新手还是希望进一步提升的老手,这篇文章都将为你提供宝贵的经验和启示。
    19 4
    |
    5月前
    |
    Java Unix Linux
    编程入门(二)【计算机基础三】
    编程入门(二)【计算机基础三】
    51 1
    |
    5月前
    |
    存储 人工智能 网络协议
    编程入门(二)【计算机基础一】
    编程入门(二)【计算机基础一】
    37 0
    |
    5月前
    |
    存储 数据处理
    编程入门(二)【计算机基础二】
    编程入门(二)【计算机基础二】
    43 0
    |
    人工智能 缓存 自然语言处理
    初学者必须知道的对于面试的技术记汇
    如何回答的一个技术记汇,或你对xxxx的理解 例如:你说一下对闭包的理解 答:1.xxx是什么 2.应用场景 3.优缺点 ​ 4.具体实现 5.还有没有更好的解决方案!
    96 0
    初学者必须知道的对于面试的技术记汇
    |
    存储 弹性计算 Kubernetes
    k8s学习五-k8s介绍(为什么要学k8s)
    k8s学习五-k8s介绍(为什么要学k8s)
    196 0
    k8s学习五-k8s介绍(为什么要学k8s)
    |
    消息中间件 Oracle 架构师
    花2万块买的教程!java编程入门到精通
    花2万块买的教程!java编程入门到精通
    花2万块买的教程!java编程入门到精通
    |
    算法 Java
    自学编程,看书还是视频?
    自学编程,看书还是视频?
    143 0
    |
    JavaScript 前端开发 Java
    自学编程的 6 个致命误区
    自学编程的 6 个致命误区
    160 0