电脑编程入门自学

网络编程 2023-10-20 08:21www.168986.cn编程入门
      首先这篇文章应该更适合零基础自学的人看。因为我是零基础自学,没有任何可以指导我的资源(我是报过班的,所以现在自学)。所以我对科班的体系并不清楚,以防影响科班朋友的正常学业。因为我是从完全实用性角度去学习,而不是针对考试,竞赛的角度。而且我的专业也确保,我不可能从事计算机的工作。学习计算机对我来说,就是为了增加我的就业加分(我目前在校时间估计还有4年,所以时间比较充裕),以及对高薪IT职位的一种一探究竟的好奇。我不能理解的是,我读的书这么多,竟然可预见的工资相对这么低。所以万一学会了,可能也可以要求加薪 :)
我的方向基本是摸索朝着华为天才少年的那个方向,我个人理解是嵌入式的方向前进的。我也是看了他视频后,感觉很有意思,所以想,不如试试。
这篇文章的目的是定义新手的几个层次,以及每个层次应该阅读的书本,以及如何阅读这些书本。目前还是草稿。因为我尚处于,新手第二个阶段(理论知识似乎足够可以开始一些实践了,但还不知道深浅,也尚不知下一步该如何前进)
电脑编程入门自学
如下是我认为的完全新手的第一阶段读书顺序:
C语言的最最基本知识。 完全无需深入理解指针,仅学习到链表即可。任何让你觉得复杂的内容,都可以忽略,因为这个适合你根本不可能理解(例如printf, scanf的那些 qualifier ,在这里浪费时间,是要后悔的)
王爽的《汇编语言》。学习到第11章。(以后我会完善如何3天内搞定这本书应该搞定的知识,目前对我来说完全够用)
《CSAPP》。 这本书我应该用了3个月时间(因为疫情,暑假似乎长了一些,但也记不太清),这本书,根据我的笔记,我觉得需要简化到1个月必须完成的状态。其中我印象里,我大部分时间都是在第2,3章,以及优化,内存那里。但现在看来,显然是可以优化的。这个我需要想想如何优化。
《C in a nutshell》 基本上这本书看过后,指针基本就搞定了。也只有看过CSAPP后,你才能理解。 万不可直接看,浪费时间。 这个不需要别人指导,自己完全都有能力完成。因为本身作者就是给你列示的各种用法,你只是需要记忆。
《Linux Command Line and Shell Scripting Bible, 3rd Edition》 这本书的重要性就是你讲彻底了解了linux 。属于linux的操作的书。 看过后,你将永远不会觉得linux神秘了,或者听见什么单词感到恐怖了。(这本书的中文版我没咋看,因为本身你就一定能看懂)
《The Linux programming interface a Linux and UNIX system programming handbook by Michael》 这本书都说是字典书,实际上是本必读的书。 其中前3章,你看了就知道有多重要。当然后续有关terminal的,我感觉可以扫描而过,其他都是难得资料。你再也不会有“到底这样做是不是正规做法”的疑问。(关于这本书如何看,我需要时间整理),这本书的中文分上下册,有人说翻译的不好。但我看下来,感觉翻译的非常有水准(我是看不懂的地方,看中文,我看到的地方都非常专业)
这是我认为的最佳的学习路线(第一阶段:蠢小白到纯小白)。可以少走许多弯路,我看了下,我总共也看了20~本书了,但许多都是属于反复看同样内容的。
以上的学习路线和我自己走的是不一样的,因为我从去年11月1日就开始看C++,但实际上,我现在看感觉是有点错误的顺序。我认为,现在我是纯小白的阶段,也不应该开始C++的学习,而是应该开始看看算法了?(这个阶段我正在摸索,所以目前也不知道)
以上内容,我也同时开了新的文章。 至此本篇文章不再更新。
 
======2022 Jan 15日
在此之前曾经想通过学习HTML, CSS, JS 实现做网站的方式,提高以后就业能力. 不仅报了学习班,而且付费了好几个网课(udemy的). 最终在5月份的时候放弃. 因为什么都没有学到.每一个课程都花大量的时间在while , do , 这些我当时看到就要吐的基础内容. ...
所以我调整了思路,既然最简单的学不到东西,也不可能真正理解什么是编程,什么是计算机.那么就学最难的. 所以开始进入到C语言的学习.
现在看显然是正确的选择. 你如果要了解计算机,就必须从C语言开始. 我想也只能从C语言开始.(虽然,C++之父 BJ说可以直接学习C++,作为第一门语言)
那么如何开始学习C语言呢?
我先说说我现在的水平:
几乎没有动手写过代码. 但不表示不实验. 我全部使用书上提供的代码copy paste 进行试验. 理解原理,套路.
已经阅读了一些书籍,这个是我分享的主要目的.
对编程的整体轮廓已经有了点认识.最大的感觉就是,现在看书,基本都知道作者在说那个方面. 几乎不再遇到所谓的云里雾里的感觉.
对linux的操作也基本知道怎么回事. 除了还没有时间去研究脚本.
到今天,2022 Jan 15, 我已经阅读完成C++ primer , 王建伟新经典3本书, effective C++ ,正在阅读C++之父的两本书
那么如果开始学习C语言呢?(以下是我的提炼, 简单会提到一些我当时走的坑)
首先学习基本C 语法即可(给自己个目标,不要超过XX天),看到链表,链表只要理解概念即可. 知道基本while, for, if 就可以了. 知道分号, 表达式,statement 的意思. 千万别在scanf , printf那里浪费时间. 知道是读入,输出就OK了.
不需要纠结,一些算法,例如什么水仙花... (当然如果你是科班,学校要考这些,那没有办法). 因为对阅读经典著作没有任何用处. 反而浪费大量时间. 我除了花了好几天时间研究贪吃蛇, 再也没有研究过这些语法细节,或者说所谓的算法, 我感觉,在这个阶段学习这些太浪费时间,不值得.
有了基本的C语言的基本语法后,第一本书就是王爽的《汇编语言》. 这本书我当时花了很长时间看完,我看的非常仔细. 但现在看,完全是浪费了时间. 这本书只要看到第11章. 你应该给自己的目标就是XX天看完. 重点就是要记住寄存器的名字, 这些名字将会反复出现在以后的经典书中. 理解了这些寄存器的基本用法,完全够了. 而我从头学到尾,甚至附录的题我也都研究了边. 完全是浪费时间.没有任何用途,目前看.
看完《汇编语言》,就要开始进入到学习编程的真正旅途. 《CSAPP》
我比较幸运的是,当时开始看《CSAPP》,恰好是暑假快开始. 而这个漫长的暑假,让我把这本神书搞定.注意我没有做其中的任何一个实验. 但我做了每一道书上的习题,注意是每一道书上有答案的题. 没答案的我看都不看.我的经验是,足够了,因为我后续的读书,不受影响.
《CSAPP》如何阅读,以后添加. 这本书太关键. 读英语+中文对照. 因为英文中有一些错误,在中文书中都改了过来. 同时应该以英文为主. 中文翻译的(我感觉应该不行,我没仔细看) .注意,我今年刚考的4级. 就这个水平
自从CSAPP 我艰难的看完后. 后面的书,包括大家都推崇的《自我修养》等等, 看起来飞快,而且从我的角度,我并不认为《自我修养》是本好书, 因为其实他的关键内容,就是参考的《CSAPP》.但可以作为一个不错的辅助材料,快速看完即可. 不会有太大的收获.
后面我又专门看了几本关于指针的书. 这个以后再详细说. 因为对任何指针的不理解, 都使你阅读以后的经典著作变的非常困难. 所以指针你必须理解, 特别是多级指针,多级数组, 以及他们之间的关系. 虽然有人会说,指针就用到两级(我当时是google过这个问题的, 当时看到说3级以上就是不好的编程习惯时,心里就不那么紧张了),但我要说的是,你必须理解多级指针到N级,根本原因就是要搞透,再多级,也是和1级一样的清晰. 这是以后读书的一个重要能力.
待续 ...文章现在一气呵成,肯定不太好看,后续我慢慢更新,更改.....
===2022 Jan 16日更新
首先我是个新手, 2021年6月开始正式学习编程.
其次我肯定不是电脑方面强手. 因为我已经学习了8个月了, 但实际上几乎没有写过代码.这8个月全部用于读书,读经典的书. 更别提一些人提出的一个学期1万行代码这种要求.
我所写的这些感想,正是想说明一个问题, 如果以前你看编程的书,看的云里雾里,并不是因为你水平差, 大概率是读书的顺序没有掌握好. 因为电脑编程的书,和我们高考学习不一样的地方是:
没有提纲, 要点. 所以似乎都是要点.
每本书不上1000页,都不叫电脑书. 我在学习编程前,估计就是看小说也没看过这么长的. 不过这个潜台词就是电脑编程的书籍每一个人都能学懂. 唯一的难点就是内容广泛. 只要选书顺序正确, 应该不是问题. 例如我当时,最先看《自我修养》,根本看不懂. 但等我学习完《CSAPP》 ,再回头看《自我修养》时,就是快速翻阅了.没有几天就看完了.
迄今为止没看到有哪位高手,指出学习的真正路径.都是给了个大体方向. 朝前走. 或者罗列各种书籍. 这些实际上只会让初学者快速走向放弃.
有一本书我认为每一个字都是重点, 这本书最适合中国的学生学习,需要逐字逐句理解, 作者也表示,这本书要真的看懂,需要看3遍以上(这点我非常赞同). 因为它只需要一本书作为前奏, 其他所有内容都是self-contained. 即你不需要再去看别的书,就一定能读懂它. 这本就是《CSAPP》. 我比较幸运的是,看它的时候正好是暑假,所以我可以全身性的投入到这一本书里. 我觉得这点太关键了. 换句话说,如果我是在上学时,开始看这本书,我十有八九会放弃.
所以在寒假开启的时候,我希望编程的朋友们抓住这宝贵的时间,学起来.
===2022 Jan 18更新
这几天看C++之父 BJ 的两本书,一本principle, 一本programming . 虽然作者说principle是为大一学生准备, 但我目前感觉,没有基础的人,应该是看不懂的. 另一本programming这本书是为有经验的人准备的,我看了一点就感觉看不下去了.准备先慢慢看principle,以后再看programming.
看了这么长时间的理论,感觉到达了一个瓶颈期, 已经没有11月份以来的兴奋感(我11月1日开始看C++), 与其说是瓶颈期,不如说是迷茫期.不知下一步该如何进行.当时10月份看完C部分的相关理论内容后,准备进行树莓派的学习,发现需要C++的知识,所以开始了C++的旅途. 当时完全没想到C++难度这么大. 之前我以为C是最难的语言,那时才意识到,原来根本说的不是C,而是C++. 也明白了,为什么网上的许多课程只讲C入门,很少讲C++入门. 因为到达C++就一定不是入门这个级别了.
经过这几天整理,下一步我准备开始
CMAKE, VS code, Vim , gdb 的工具学习. 开始为进入实战做准备.
linux编程(以C为主),还在选材. 这个主要是因为树莓派架构在linux . (我是非科班,所以应该只有嵌入式 +前端的前景)
C++方面,则通过principle这本书,算是做个不冷却身子的复习. 完成后,再看看programming这本书的意义在哪里.
计划总是比变化快. 之前计划寒假开就主攻游,和陈的两本书.但我发现这两本书,都不适合我. 游的书更像是本手册, 覆盖全但过于简单,作为初学者和非科班不可能看懂. 陈的那本感觉是在聊天, 而且代码组织,以及注释我个人认为很不认真. 这点和王建伟的书一对比,相差太远. 目前看王建伟老师真是很认真在写教材. 许多东西只有比较才知道用心.
晚上更新====
变化真是瞬息万变. 今天找了一天CMAKE资料. 最后发现CMAKE不是我想象的是简化make 的. 反而是一个比较复杂的体系, 包括了测试,安装,打包, 应该是大型软件的东西(我理解) . 所以暂时不学习这个了. 这几天稍微看看make,等其他工具.
不过,发现一本可以跟着学习的书: CMake Cookbook by Radovan Bast . 这本书当前看是可以跟着一起学习的,步骤清晰,详尽.
而 《Professional CMake A Practical Guide 》,则是本典型的手册. 只有feature , 没有案例. 如果这都能看懂,应该已经是专家
===2022 Jan 19 更新
作为编程新手,怎么样获得有效的图书,并且得到帮助? 答案是, 要加入学习小组.
我是个习惯自学的人. 但喜欢分享,也愿意回答问题,实际上就是有点八婆. 八婆的最大的特点就是分享自己的观点,获得满足感. 难道不是吗?
但根据我这几个月的“自学”, 我发现一个学习小组是很关键的. 否则我一定还有很多弯路要走. 这真要感谢我们这个学习小组.
我开始从谭教授开始,大家就知道是个很“闭塞”,且比较自大的一个人. 那时几乎没上过知乎.所以从淘宝上搜索的C的千万册教科书. 直到加入一个知名的大神的学习群.事情开始变得清晰. 这种大群初期,主要讨论技术问题. 发展到一定时间往往是面试,工资等非技术问题.所以仍处于学习阶段的一些学友会组织在一起,形成一个新的小群.
我的主要收获都来自这里,包括C++ primer, 因为如果不是这个小群,我当时一定选择是的C++ primer plus . 因为我比较固执的认为plus的肯定是更好么. 学习小群,学习气氛是浓厚,纯粹许多. 而且大家分享的也都是干货. 各自不知对方是谁,既有隐私,也很坦诚.
所以,对于完全的新手来说,能加入到这样一个学习小组,帮助是巨大的. 而且可能是根本性的.
我推荐几个我知道的比较靠谱的学习大群. 至于学习小群,需要自己积极去组建. 我想应该在5~8人. 说到8人,是让我想起最近一个宿舍6人都包送上了各大名校研究生.他们的经验就是,互相教授自己的心得. 所以我觉得上限应该不要超过8人.人太多,南郭先生就容易出现. 人太少知识面不够.
我推荐的是,秀哥, 北哥,卡哥 , 大家可以关注他们,并问他们咨询加微信群.
===2022 Jan 20 更新
经过3天时间密集的研究cmake, make, 我只能说是个非常沮丧的三天. 原本希望能够比较透彻的理解make,但最终没有一本书能够读下去.
不过根据这段时间学习计算机读书的经验, 我比较坚信的是,如果不是书不好(大概率,因为经典就那么几本),那么一定是读书的顺序有误. 而我看的这三本关于make的书,肯定都是质量有保证的:
一本是make官网的手册, 基础部分很容易理解, 但会突然进入迷雾.
其他两本的作者都是make的维护人员.其中一本根本就不讲基础,直接就是应用
所以我仔细研究了之前几个看见的项目的makefile 我发现,这些makefile设计实在巧妙,而且必然用到和linux shell的配合. 所以我现在想makefile应该是个经验中获取的知识. 因为涉及的内容太广泛. (因为其中一个作者用make ,进行图书的编辑工作).
所以并不是一个技术活, 是个经验活. 我想这也是为什么,市面上没有一本书能够很好的讲解make的真正原因. 三本书无一例外都是偏手册类型的, 即可以查阅,而不是tutorial.
所以应该不需要再花太多精力再makefile上. 而是将之前的一些makefile的范本,作为自己的基础, 遇到不同情况做相应的调节,或者优化.
明天开始,研究下gdb ...
===2022 Jan 22 更新
快速浏览了C++之父BJ 的两本书: 一本《principle》,一本《programming》
其中《principle》 是作为大一的入门课程进行设计的. 所以我带着非常强的兴趣,准备大干一场. 但草草几天就收场了. 这本书,如果你怀着快速阅读的目的,比较浮躁的心,是读不下去的.我就是这种情况.
毕竟是C++ 之父,而且阅读了无数各种文学的作品一个人的书.
我的想法是,这本书不适合初学者.也不是一本好的C++入门的书籍. 但是一个好的reference. 不过语言太过难懂,或者说过于优美,繁荣的手法. 其次这本书用FLTK作为贯彻整体的一个线索,我感觉也会让读者“分心”. 而且FLTK当前的版本已经有了比较大的更新(我猜测),我试着编译书中的案例,没有成功. 因为许多Macro的定义都变化了. (不过这个是个非常好的debugging的实例. 包含如何从网上下载源代码,如何编译,如何链接等等)
而另一本书《programming》 , 本身就是给experienced programmer准备的. 不过,其前面的tour 部分就很生涩. 到了开始详尽描述技术细节的地方. 对我来说简直煎熬. 这本书完全不能当作tutorial. (虽然作者的想法是,想写一本既能做reference,也能做tutorial的书)
不过,可以非常肯定是,这两本书,值得放在你的目录里. 因为作者非常不惜笔墨描述一个问题. 万事有利有弊,也正是因为过度描述,让这本书看起来很费劲. 所以非常适合,作为reference ,即当你需要一个概念,或者一个方向时,这两本书是比较合适的. 可以了解其中的编程哲学,前世今生. 但不一定是你想要的内容.这就是为什么我草草收场的原因.
而另一本经典,相对来说, 《C++ primer》属于惜字如金的 , 你可以快速知道作者想表达什么,并且概念之间的联系非常紧密. 所以作为入门C++ primer实在胜出一截. 听说第六版要出了,值得再看一次.
以下是截取principle的两段, 一段是和技术无关的,一段是技术描述.可以感受下老头的文学功底:
To get into the air, a plane has to aelerate along the runway until it moves fast enough to “jump” into the air. While the plane is lumbering along the runway, it is little more than a particularly heavy and awkward truck. Once in the air, it soars to bee an altogether different, elegant, and efficient vehicle. It is in its true element. (必须用3个形容词以上才能形容一个名词)
The C++ standard library provides a framework for dealing with data as sequences of elements, called the STL. STL is usually said to be an acronym for “standard template library.” ( 如果是我的话: STL, stands for standard template library, is a framework to manage data as sequences of elements. )
下一步要开始进入linux的实战了. 具体哪本书还没确定. 工具的话,gdb, vs, vim也是这几天整理.....
===2022 Feb 7
看了看日子,真是倒吸一口凉气. 一转眼15天过去了. 这个年过的有点无法自己的放纵. 实际上我是可以安静的读书的,但无论是谁,我想总是家庭的人,社会的人,所以对于每一个人来说,时间都是公平的. 所以,在能安静的读书学习的情况下,一定要珍惜这宝贵的一分钟 to fill the minute with 60 seconds distance of run.
一早上,把之前的学习做了一个总览, C++的许多知识已经快忘的差不多了. 不过C,指针的知识却仍然是历历在目,甚至都能记忆到是哪本书的哪章,哪页. 甚至还有新的更好的心得.
仔细想了下,为什么C++的知识模糊的这么厉害? ...不敢马上下结论, 我感觉C++模糊的原因可能是因为没有实战的原因. .这个以后再研究.
因为大部分C++知识已经模糊,所以原计划是想把effetive C++再通读一遍. 但最后决定再放一放. 因为effetive C++这本书很容易读. 换句话说,就是一些实战经验.容易读的书,相对来说也容易忘记, 也容易捡起来. 在实战的时候再一起通读一遍.
节前看了了GDB, 感觉补充了许多附加知识,当时就有一种感觉, 计算机的图书在基础打好后(CSAPP), 分为:
linux 操作系统工具类 : make , g , gdb , shell
C/C++ 语言类 :
服务器,网络类: linux的一些服务器,例如ssh, sftp, httpd ,等 属于操作配置 one-time的学习.
而这三方面的书籍有点像三副牌在洗牌. 属于层层相互叠加的过程. 换句话说,无法做到逐一击破, 只能三点同时前进, 有点像军事的maneuvor. 互相支持,否则某点冲的太前面,发现没有了flank support.
根据这些模糊的经验,下一步,我准备开始:
Linux shell的深入学习(之前的基本的应该不够用了) (有几本书作为候选)
C++ 多线程的深入学习 (已选定 C++ concurrent in action by AW )
VIM 的深入学习 (有几本书作为候选)
3个点同时开始. 并且试着建立自己的一个VPN 服务器(涉及购买服务器,安装VPNserver, 等细节)
===2022 Feb 13
可以很放心的分享两本好书, 令人开心的两本书。 这两本书如果在之前的某个时间点看到,真是会节省不知道多少时间。 至少到现在,更加证明了,学习计算机知识,必须体系化,换句话说,就是不能碎片化。 换句话说,必须以好书为本, 视频在开始阶段是没必要看的。
我想许多初学者和我一样,都是先看视频,看的很开心,但一无所获。 虽然到目前还没看过侯老师的视频,但我实际上也提不起兴趣看,因为,我感觉在你的知识还没有体系完成前,看任何视频,都会造成负干扰。
下面的这两本书,就是典型的证明这个负干扰的严重性。 我想每一个人(包括有经验的人)都被shell, VIM整的云里雾里, 各种youtube, 各种bilibili . 我收集的各种诀窍的视频是个常常的列表。 可想花费了多少时间。
简单介绍下这两本书
1,Linux Command Line and Shell Scripting Bible, 3rd Edition 。 这本书虽然800多页,但阅读会非常快。其中partI , II会比较慢,因为是体系化的介绍,许多内容都非常关键(却非常简单)。 Part III Part IV , 则可以快速浏览,因为是一些高级应用, 我们现阶段用不上,但可以大体看下,有个印象。
这本书将揭开许多之前遇到的一些不可思议的错误,无论你看了多少stackoverflow也无法解决的疑惑。 例如subshell的概念。肯定是你没想过的。
2, Practical Vim Edit Text at the Speed of Thought 这本书则是真正的VIM 入门到大师的著作, 作者后面还有一本是更高级的(modern VIM),不过我稍微看了下, 应该现阶段不需要看。有个遗憾是,我看完这本书的时候,才发现,已经有第二版了。大体看似乎没有什么大的区别。但还是有点不甘心, 所以准备下周快速把第二版看下,不要遗漏了这美丽的技巧。
其中第一本书,敢叫bible 还是有点水平的。 但要想吸收这本书,我理解,需要先学习有关多进程的知识(即fork ,即可) 。 如果这个不知道,将会错过这本书我认为最有意义的一部分内容。
晚上更新。
下周开始可以真正开始实战了,选择在两个平台进行,做多线程的工作。主要工具是VS,和VIM 。
因为完全是自己摸索,所以到时根据实际情况进行调整。
 

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by