给2020级初入GIS的萌新-编程建议
\(\qquad\)接下来就由我来给你们这些小孩说说编程中的那些事。先来提个问好吧,“你们知道你们接触到的第一个编程语言是什么吗?”(答“不知道”,“好的,我就讲到这里,谢谢”...开玩笑的啦),答“C语言”,好,很有精神,下一个er!又问“那你觉得这东西会难吗?”(答“不难”,好,你是我大哥,不难还说啥!),答“难..吧”。好了,现在我开门见山,对着C语言直接一个滑铲,它便会以头抢地即卒,你们相信我说的话吗?(诶诶诶,刚刚谁说的不?小心我们一起排挤你嗷!),好,下面且看我怎么圆。
一、为什么说编程语言不难?
\(\qquad\)在你们大一下学期的时候,你们中的大部分会接触到一种全新的思维——名曰“计算机程序设计语言与计算机程序设计”(以下均简称“编程语言与编程”),当然可能会有一小撮人在很早的时候为了玩小游戏更牛逼,然后就接触到脚本语言开发,也就是写点儿无伤大雅的外挂程序,比如那些无敌版、无限金币版、啥都无限版之流。
\(\qquad\)言归正传,大家康康这个“编程与编程语言”,它的意思是不是就包含了两个,一个是“编程”需要具备的思维,另一个则是将这种“思维”转换为计算机能听得懂的语言。其实后面你们就会知道,它们俩都有各自的“行话”,前者就是“编程算法”,而后者就是“编程语法”。此时认真思考的人便会得出如下结论:从这俩货的名字就能够看出来,前者是“思维”,后者是“规矩”,很明显后者(也就是“语法”)要比前者(也就是“算法”)easy太多了。umm...做一个奉公守法的好市民,还是做一个天天头脑风暴的科学怪人,孰易孰难这可能会因人而异,毕竟人与人的体质不能一概而论是吧。
\(\qquad\)咱们就先从这个简单的说起好吧,就是编程语言。你们觉得在学习这个东西之前应该要了解那些其他但是又相关的知识?
二、为什么先要学习计算机原理与基础?
\(\qquad\)首先,C语言这样的编程语言他是不是一种语言(别说为啥鳄鱼不是鱼,少来!)?那既然是语言,你们回想一下你们平时接触到的语言有哪一些?
员工 员工类型 交流语言 小蔚学长 普通中国百姓 中文 你是一个老总 孙笑川 大日本帝国天皇 日本語 朴老师(PDD) 猪皮恶霸 哼哼哼 \(\qquad\)这个懂的都懂吧,不懂的我也不想多说了。如果现在你新招了一个员工名叫“计算机”,你想让他现在就去干活,是不是得懂得一种能让计算机听得懂的语言啊?那这种语言我们“码农”就亲切的称之为“编程语言”,所以编程语言的目的就是让计算机去干活,诶你这样一想是不是有感觉这玩意儿轻松了许多?但是别笑得太早了朋友们!你真以为知道编程语言就能轻松的驾驭计算机了吗?抛开“算法”不说,直接举个话糙理不糙的例子好吧,你让PDD给你即兴作出一首诗,他会如何响应你,是反手一个“看我神威,无坚不摧”还是“我是全英雄联盟最骚的骚猪”,或者作诗是不可能的,这辈子都不可能作诗的,不过可以看我反向抽烟啊!所以这也就反应了一个问题,如果你根本不了解这个计算机能干些啥事,那学着这些编程语言不是瞎扯淡吗?正如一个老前辈所说,本来这个摊位是买肉夹馍的,你非得跟我要条宠物狗,我能咋办,那不就只能直接蓝屏给你看了吗?一般这个时候你都会用力的拍打这个摊位,然后嘀咕着“这玩意儿真**垃圾”。其实上述的朴老师反常回应和“蓝屏”也是有行话的——名曰“抛出异常”。
\(\qquad\)说到这里你们应该清楚了为什么学习编程语言之前要先了解了解计算机基础了吧?但是话又说回来,为什么我只要求你们了解了解而不是学会呢?这是因为,只有当你们接触到高端的底层开发时,这些东西才能排上用场,如果只是想做做应用的话大可不必,不过了解一下也算得上是你的优势了。
三、什么是计算机?为什么被称之为电脑,又为什么是计算?
\(\qquad\)好,我们首先来看一下什么是计算机,计算机就是电脑。别笑,真是这样。这下面不就接着屁股来了吗?来看啊,为什么称之为电脑:因为它具有“数值计算”和“逻辑计算”的计算功能,还有储存记忆功能。这是不是像极了你的大脑?还真是吹牛逼不怕吹大了,等你学了什么是计算机网络的时候你就明白了,原来你的大脑只能进行1+1=2这种简单数值运算,以及判断1+1是否等于2这种简单逻辑运算,什么储存记忆的功能分明就是人们强行对人脑扣上去的定义。好了好了,不打击你们的自信心了,收回来收回来,这就完了哈,三个问题都解释了,不多说了嗷。
\(\qquad\)再给你们抛一个问题,你们知道计算机为什么要有“内存”吗?“存储数据?”,磁盘存储得更多呢;“加快运行速度?”,你当CPU是干啥吃的?“暂时存放CPU中的运算数据?”,这句话是没错,不过这是它的作用,你要知道现在CPU也是有寄存器的(除了MCS-51比较穷之外),而且有按MB计算的。
四、计算机的发展过程
小孩:手指为计算工具,大脑中定义了一系列规则,以及在大脑中完成了运算。实际上手指并不是计算工具,计算工具是小孩的大脑皮层,你可以想一想你做1+1=2的时候需要手指吗?但是因为小孩的大脑皮层发育不完善,所以只能利用手指来释放大脑的负载。
算盘:算盘为计算工具,算盘界中定义了一系列规则,在打算盘的时候在算盘上完成了运算。
帕斯卡:基于一种系列齿轮组成的装置。
莱布尼茨:发展了二进制,将其应用于计算机领域。(以上均为人为地控制“机器”,这样它才能正常运作)
两位法国的纺织机机械师发明了“程序”,他们通过观察织女们纺织的过程,惊奇地发现了其中的过程:首先织女们先要做出要纺织出的图案,然后再按照这个图案严格地进行编织!此时在织女们和纺织机之间就存在了一种神秘的联系——图案,其实就是一套完整严格的法则!这也是为什么现在程序员写程序被称之为“编程”的原因,因为一开始就是由编织进化而来的。
杰卡德:通过吸取灵感,发明出了“穿孔图案”,也就是在一个白板上只要此点有针线经过,便戳出一个洞。这样当满板的针向上运动时,只用有孔的地方针才能穿过,没有孔的地方就将针挡住。在计算机行话中有一个“程序控制思想”的术语来专门描述这种行为,这同样也标志计算机自动化启程。
天才巴贝奇:这个人的思想一直沿用到现在的计算机组成,是比冯·诺依曼教授更早萌生出“计算机”组成的天才。巴贝奇的目标是做出一台差分机,用于将所有复杂的函数运算转换为简单的加法运算。他提出一台差分机的构成主要有三个大的方面:①齿轮式的“存储库”,称之为“仓库”,用于存放一些运行时所需的数据。②基于帕斯卡转轮的“运算室”,称之为“作坊”,用于进行数字运算。③基于杰卡德原理的控制器,用于控制运算符,进而控制程序的运行。通过“仓库”中提出的数据,交由控制器控制应该进行什么样的运算法则,最后交至“作坊”进行计算得出数据。
艾肯:由于所处时代的工业水平极大提高,故将巴贝奇的差分机进行的“电磁”改造,把原来“蒸汽”带动齿轮转动的模式改成了“电磁”带动开关闭合(闭合用1表示,开路用0表示),发明出了MarkⅠ。
\(\qquad\)数据:由某种介质来表示状态的变化。蒸汽\(\longrightarrow\)电\(\longrightarrow\)电子。而在电之后内存就不行了,因为储存数据需要电,导致只要已关机就数据就GG,所以人们想出了用磁来长期储存数据。
五、编程思想以及编程风格
\(\qquad\)编程思想可以稍微说说,比如尽可能的对某一具有相似特性的事物进行封装,与封装相矛盾统一的解耦(也可以理解为重构),代码的复用(这个可以说是解耦的副产物)。但是编程的风格这个我是不能说的,因为每个人都要有每个人的编程习惯,适合自己的才是对的,这就像走中国特色社会主义道路一样,所以我就不说了吧,想了解的可以上网搜搜这些编程风格。另外再你们学习Java的时候可以借鉴一本书《Clean Code·代码整洁之道》,读这本书就像一个老程序员在亲口给你传授一些经验一样,比如变量名的命名规范、注释的规范、函数文档撰写的规范等等。然后算法的话,如果你是真的闲的没事干可以看看,图书馆里面都有,你也可以去咱们学校的ACM的网站上逛逛。
六、推荐的书籍(开始瞎扯:这些书我都没看过,听别人介绍说这些都是圣经,所以如果不确定时间的空余,建议是不要买,因为北林嘛,这些东西不考)
(1)
关于编程风格的书:《Clean Code》或者中文版的《代码整洁之道》,这本书主讲敏捷过程的实践,其中最突出的风格就是“极限编程XP”(思想为测试先行,就是先写好测试代码,然后再写开发,当开发的代码吻合测试的时候,下班),大三上学期中《软件工程》涉及到;(2)
关于编程素养的书:《Clean Code》的兄弟书籍:《代码整洁之道·程序员的职业素养》;(3)
关于编程算法的书:由于你们下学期学的是C语言,所以可以看《数据结构与算法分析——C语言描述》,而且你们大二上学期会学到《数据结构-C++/C》;当你们学习Java的时候可以看《数据结构与算法分析——Java语言描述》;当你们毕业了就可以看高阶版的《算法导论》了;
链接:给2020级-算法全套资源; 提取码:9byu;
链接:给2020级-软件安装包;
链接:给2020级-编程语言视频资料;
七、写在最后
勒布朗(LeBlanc)法则:稍后等于永不(Later equals never).

浙公网安备 33010602011771号