本文关于如何从零开始学金融(特许金融分析师报考条件),据
亚洲金融智库2023-03-27日讯:
一、从零开始学金融入门?
金融学入门第一步,先了解金融市场
认识金融:什么是金融?
跟一个外行讲什么叫金融,我会说金融就是金钱的搬运工,有人有钱没处花于是存到银行(比如普通老百姓),有人着急要钱买原材料生产(比如各种企业),于是银行等各种金融机构就在这之中充当了搬运工,所有金融行业的人,都是这个金钱转移环节上的一名小工人,了解金融市场就是为了了解各种金融机构在这之中分别扮演什么角色,再研究金融市场中的各种工具,债券,股票,期权期货,外汇,掉期,学习这些金融工具能帮助你了解如何更好更快更精确的把钱进行转移。不仅要知其然,更要知其所以然,说白了就是这些工具为什么会被发明,他们在金融领域都解决了什么问题,见到不少人觉得金融难,期权什么的怎么也学不会,其实是因为他们只记住了定义,根本不知道为什么大家要买卖期权,所以学金融一定要多贴近实际,少拘泥于理论定义。
金融不代表股票,很多人认为金融就是股票,但其实我们所说的股票,也就是上市的股票,也就是企业融资的一个手段之一。货币市场和资本市场是金融主要的市场,不过普通百姓接触不多,所以不为人所了解。
该做好哪些准备
1. 把Excel学好 无论你具体进入哪个金融子行业,基础工作无非就是收集数据,整理数据和分析数据。所以请把Excel学好用好,如果不是金融工程向,可以不学VBA或者只简单了解。但基本的操作和函数都要熟练掌握,这样的新人会很受欢迎。 我见过几乎所有毕业生的简历都会写Office熟练掌握,但是在学校里用的那点功能和“熟练”是有很大差距的,多去些从业人员探讨的论坛,下载人家的表格,弄清楚背后的功能和逻辑。 PPT和Word也很有用,但是从优先级上来看,Excel最重要。
2. 不要急于自上而下地了解,而应该自下而上地学习知识 不用花太多时间在形而上的东西上,如果本科是理工科,把基础打好,保证自己的大学成绩。少看故事性的专业书籍,多看技术性的,《货币战争》很宏伟,但是不如多记清楚几个固定收益计算公式。 当你的知识积累到一定程度,你自然会有识别能力,去选择那些值得花时间了解的学术著作。
3. 结识更多有价值的人 国内金融行业现在的门槛已经不是一般高了,但是对于聪明的人来说,先天资源不足也是可以靠后天补齐的。参加活动,论坛,聚会,小组,认识志同道合的人,认识行业前辈,为以后实习和找工作做准备。
4、考证 证券从业资格、期货从业资格等从业必须的证书,考资格证书一方面本身就是对行业的基础常识进行学习,另外一方面在实习、投简历时会让用人单位觉得你已经做了足够的准备。CFA、FRM等证书,这些考试是属于增加简历厚度的,但考的都比较贵,所以要根据自身就业目标和专业做好选择和充足准备。
5、参与实践 主动参与股票、期货、基金、银行理财产品等等金融产品的交易中。哪怕是进行模拟交易,现在很多公司都有成熟的模拟交易环境,而且会在校园开展活动。交易中的经验是无法教出来的
希望对你有帮助,也希望你能快速进入金融市场施展自己的才华
二、学电焊如何从零开始学?
从零开始学,首先得熟悉电焊机电流,熟悉电焊机,焊把,焊条的用法。
学会根据焊缝宽窄,焊件厚度,选择适当的电流和焊条。
这些熟悉之后拿着焊把,让焊条与焊件之间保持适当的距离(两毫米之内)开始练习焊接。
后期怎样练成还得看个人天赋。
三、英语如何从零开始学?
在网络上,很多文章教大家怎么一个月过六级,半个月过四级,个人认为:可能!但那绝对是针对英语基础比较好的朋友。如果你开始英语基础就不好,那就只能和我一样,脚踏实地的一步一步走。其实最重要的一点,就是学习没有捷径可以走。我希望把我的一些经验同大家分享,特别是那些学英语没有基础,又很想学好英语的朋友。
听力: 听力部分是四六级考试里面最容易拿分数的部分。总分20分里面,如果听力水平较好,拿16-18分不成问题。所谓的水平好,我觉得只要能听懂voa stand english,应付六级就足够了。作为我个人,我没系统听过历年四六级考试的题目,但是考试估分,听力都是16-18分。
最开始的时候,我连听voa special english都很困难。我的方法是:一个sp要听4-5次,把里面不懂的英语单词的发音,含义全部搞清楚,然后每天坚持2个小时的听力训练,狂攻sp。如果没事,就拿一个MP3吊耳朵,让自己慢慢习惯英语语境。
2个月后,我听了一盘四级英语考试磁带,发现自己原来根本听不明白的东西变的简单了。 现在,你已经具备了一定的听力基础。接下来,可以进行一些special的听写,尝试听stand English。这个阶段真是打击你信心的时候^^:听写出现很多拼写错误,stand听起来象天书,然后就想:我的水平还是不行啊,5555~~~不过没关系,其实你已经在进步,只是你没察觉到而已。
坚持下去,慢慢就发现自己的听写正确率提高了,而且stand也变得越来越熟悉。当听写special觉得简单的时候,就可以开始尝试听写比较短的stand。如果能坚持进行训练,半年左右,你就已经达到了六级外语听力的要求。因为六级对听力的要求不是特别高,能听懂stand的话,你真是会觉得六级的语音真的挺慢的。
单词 这是一个老生常谈的话题,大家知道,单词是英语的基础,没有单词,就好象建大厦没有砖头,只能幻想空中楼阁。但是被单词又被大家认为是最难,最枯燥的事情。基础好的朋友可以通过阅读学单词,但是对基础不好的,这点根本行不通。整篇文章都看不太明白,还谈什么学单词呢?既然咱们现在水平不行,就要拿出比别人更多的努力。
我考完六级,背单词的草稿纸已经放满了一个大箱子。 大家肯定有这种经验,前不久背了的单词,很快就忘记了,那么该怎么办呢?我当时是每天固定背30-40个左右的单词,第二天复习前一天的单词,然后每个礼拜天,花1小时把一个礼拜的单词复习一下,每一个月又花几个小时把一个月的单词复习一次。
这样下去,半年就能积累比较大的词汇量。在考试前,把单词再温习一次。因为是针对考试,可以找到关于四六级考试的高频词语,重点背诵一下(网络上有很多相关资料)。 对于考试中间的vocabulary,就需要靠做题目了。我考六级的时候,是做的北外出的一本六级考试词汇突破。
花一个礼拜把里面的题目全部弄清楚,不懂的单词全部记下来。因为六级往年的经验就是:很多题目是重复的。 阅读 阅读在我看来,就是通过增加阅读量,提高阅读速度,掌握一定的阅读技巧。 最开始的时候,因为基础比较差,太难的文章肯定不适合基础差的朋友。先可以看一些"书虫"(高中水平)一类的改编小说,练练感觉。
当单词量积累到一定程度以后,就可以正式开始提高阅读水平了。第一是做真题,从四级到六级,力争把真题里的句子、单词都弄明白,并且对其中的难句做一定的分析,特别是语法结构。这里有一个问题:最开始你做题目的时候准确率会很低,千万别灰心,坚持下去,从每一篇阅读里面吸取精华,很快就会发现:阅读真的没那么可怕。
第二,对于六级,平时可以看看China daily一类的新闻杂志,即可以提高自己的兴趣,又增强了阅读水平。现在我每天晚上都喜欢看1-2版英文报纸,已经成习惯了。 作文 作文一直是我最弱的项目。虽然我高中语文都是全班前三名,可惜大学根本没摸过语文书,丢光了。
如果你按照上面三个方面去学习,你作文肯定不会很差劲,毕竟英语是一个综合提高的过程,你听力、阅读,单词都不错,不可能作文会差得一塌糊涂。 但是这不代表不要努力。这里我记得一个六级提高班的英语老师说过的一句话:读书破万卷,下笔如有神。作文一个字:背!如果你背了很多很多范文,作文不会低于6分的。
但是我建议在背的同时,可以用一个小本子,把一些很精彩的句子抄下来,经常看看,并举一反三。同样一个句子,用在不同的地方,会有什么不同的效果呢?自己体会一下。而且这些精彩句子正是出彩之处,也是老师给你高分的依据。
四、如何从零开始学烹饪?
邯郸北方钓鱼台烹饪学校集中教育优势,以“精英模式”培养人才,利用校内实训设备,采用“工教结合、工学结合、工研结合、校企合作”的人才培养模式,在教学中使每个学生都可以得到老师的亲自辅导;利用赴企业实训的机会,实现学生与老师共同工作、共同生活。老师负责对学生的培训指导与考核,并在实训中实现对学生的全方位培养,极大的满足了行业、企业对人才培养的要求。
五、如何从零开始学唱歌?
想要从零开始学唱歌可以先从乐理基础开始,同时学发音,从了解自己的身体构造开始,然后慢慢过渡到学习调动自己不同地方的共鸣。
六、如何从零开始学英语?
学习方法:
1、树立目标,坚定信心
这个阶段,不需要背特别多的单词、不需要看特别多的语法书。
2、学习音标
为什么不是单词,因为如果不会读,单词是记不住的。以我的经验,单词的记忆是需要通过听到自 己的发音,来记住的(下文『背单词部分会详细阐述』)。音标不是那么的难,所以我不推荐特别 的教材。百度一下即可。这里需要掌握的是英标的读法(英英和美音的区别)、写法以及大致的单 词音标构成结构。了解原理即可。时间控制在 1 到 2 个月。
3、基本语法
音标搞定之后,就需要开始学习基本语法知识了,教科书我用的是『新概念英语 1』-- 非常适合边 工作边自学的朋友。包括 5 个基本句子结构,各种句式,英语基础知识。
4、背单词
这里就要讲究方法了,个人学习过程中,背单词是最需要讲究方法的。传统上认为花整块时间背一 天可以管 1 个月,实际上效率极低!而且对于上班的人来讲不具有可操作性。我用的方法:少量, 多次(意思是每次看大约 300-400 左右词汇,多次的去轮番地看和跟读这些词,卢根词汇原创)。
5、写作
到了这一步,理论上应该借助字典能看得懂英语杂志了。但是这还不够,需要高效地阅读与正确地 写作。『新概念 3』就是帮助提高这部分的。这册书要学好不容易,我的方法是报班--这也是我认 为在职人士高效自学的方法之一。和周围的同学一起努力,这样大家相互的促进会将枯燥的学习变 得丰富多彩。
七、如何从零开始学俄语?
先从口语入手。俄语说起来会比较朗朗上口,直接与懂俄语的人进行交流学习,会进步很快,一些口岸城市,他们常与俄语系的国家打交道,俄语说的都很好。
八、如何从零开始学德语?
1、 自学就要掌握好发音。一个正确精准的发音对于德语词汇记忆具有至关重要的作用,进一步决定应试中的听力和口语水平。
2、 建议学生在课间自己准备一本语法书。就德语这个繁杂的语法系统来说,这是很有必要的。
3、德语从初学起就需要配备词汇书,以进行系统性总结与记忆,尤其是固定搭配和一词多义。
九、如何从零开始学音乐?
1、如果你是零基础,你首先要学习一定的乐理知识,在这里给大家推荐一本书,是李重光的《基础乐理》,乐理是学习音乐的基础,没有乐理知识,学音乐知识纸上谈兵而已。如果你有一定的乐理基础,或者会某些乐器,那你就可以直接到第二步了。
2、学完乐理后,就到了和乐理一样重要的知识了,这就是视唱练耳。视唱练耳是音乐的灵魂,是音乐不可缺少的色彩,因为之后的音乐学习,不论是学习器乐还是声乐,都会发现视唱练耳是非常有帮助的一个技能,所以视唱练耳是不可或缺的一门知识。这边给大家推荐,孩子学习视唱练耳使用《全国音乐等级考试音乐基础知识》分册,乐理视唱练耳分册。成人可以使用李金华的《应试视唱百条》。
3、接下来,已经具备了基础的学习知识,可以开始学习各种器乐或者声乐了,如果是想要学习编曲的朋友,这里还需要再学习作曲。要想像那些音乐人一样写出一首歌,要准备的东西完全还不止这些。这些只是理论准备,你要写出优美动听的好歌曲,好旋律,好音乐,作曲是必须要学的,其实,当你学完前面所说的知识后,你会发现你已经差不多会作曲了,学作曲只是丰富你的作曲知识而已,想做出现在的流行歌曲,如果你不深学作曲这门知识,其实也可以,当然学了更好。
4、最后,学习编曲的学生就可以直接跟随编曲老师,学习如何使用软件,如何熟练运用,如何实践了。
十、如何从零开始学编程?
You can code. They cannot. That is pretty damn cool. Learn Python The Hard Way
在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏?iOS或者Android应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。
不要浮躁
Bad programming is easy. Even Dummies can learn it in 21 days. Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it.
不管是在线下还是线上的书店,满目都是《21天学通Java》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。Matthias Felleisen在他的著作 How to Design Programs, Second Edition 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。
所谓的「捷径」或者说「银弹」是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的「十年磨一剑」,所以不用着急,功不唐捐。
培养兴趣
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.
Linus Torvalds
沉醉于编程,编程更是为了兴趣。兴趣是推动力的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投入到你的10年/10000小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。
这幅图取自 Douglas Hofstadter 的著作Gdel, Escher, Bach。图中的每一个字母都由其他更小的字母组成。在最高层级,我们看的是"MU",M 这个字母由三个HOLISM(整全)构成,U则是由一个REDUCTIONISM(还原论)构成,前者的每一个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的"MU"组成的。
每一层次的抽象都蕴含着信息,如果你只是幼稚地单一运用整体论在最高层级观察,或运用还原论观察最低层级,你所得到的只有"MU"(在一些地区的方言中mu意味着什么都没有)。问题来了,怎样才能尽可能多的获取每个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?
教育与学习过程中普遍存在一个关键问题:初学者们的目标经常过于倾向整全而忽略了基础,举个常见的例子,学生们非常想做一个机器人,却对背后的
理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来
这一过程完全提不起兴趣。
在这里对于初学者有两个大坑:
如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。
第二个坑没有第一个那么明显:幼稚的「整体论」方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。
但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。
为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。
总之,编程是连接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。
作为初学者,应以后者为主,前者为辅。
启蒙
「学编程应该学哪门语言?」这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是「哪些东西构成了编程学习的基础」?
编程知识的金字塔底部有三个关键的部分:
算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,之后对于每个数…
语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。
系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?
启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。
因此,为了尽量最小化「语法」与「系统基础」这两部分,建议使用 Python 作为学习的第一门语言,虽然Python对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。熟悉Python后,学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题,且在后期帮助你理解操作系统层级的一些原理,如果你只想成为一个普通(平庸)的开发者你可以不学习它。
下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。
完成 Codecademy 的 Python 部分。这只是热身部分,尽快完成它,因为你永远只是在浏览器里,你不会学到如何搭建开发环境。在 Codecademy 这类的编程学习网站学到的那点儿东西,哪怕你只想做一个小的不能再小的项目,你都不知道该从哪儿开始。
完成 MIT 6.00.1x(中文化)(如果你英语不过关,完成麻省理工学院公开课:计算机科学及编程导论。MOOC 是学习编程的一个有效途径。虽然该课程的教学语言为Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,python编程语言,一些简单的数据结构与算法,测试与调试。支线任务:
完成Python核心编程
完成 Harvard CS50 (如果你英语不过关:完成哈佛大学公开课:计算机科学 cs50 。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:
阅读《编码的奥秘》
完成《C语言编程》
[可选] 如果你的目标是成为一名 Hacker:阅读 Hacker's Delight
PS:如果教育对象还是一个孩子,以下的资源会很有帮助:
5-8岁: Turtle Academy
8-12岁:Python for Kids
12岁以上: MIT Scratch 或 KhanAcademy
入门
结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如Web开发,Android开发,iOS开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习计算机科学通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。
那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么(Why)要这样设计?,思考怎样(How)写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。
设想 :
X = 用于思考解决方案的时间,即「解决问题」 部分
Y = 用于实现代码的时间,即「利用计算机」部分」
编程能力 = F(X, Y) (X>Y)
要想提高编程能力,就得优化 X,Y 与函数 F(X, Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了Structure and Interpretation of Computer Programs(SICP)《计算机程序的构造和解释》,它为你指明了这三个变量的方向。在阅读SICP之前,你也许能通过调用几个函数解决一个简单问题。但阅读完SICP之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP的教学语言为 Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。
Peter Norvig 曾经写过一篇非常精彩的SICP书评,其中有这样一段:
To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.
如果你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点
虽然SICP是一本「入门书」,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:
Udacity CS212 Design of Computer Program): 由上文提到的Google研究主管Peter Norvig 主讲,教学语言为 Python,内容有一定难度。
How to Design Programs, Second Edition:HtDP的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读HtDP。
UC Berkeley SICP授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像(中文化项目)
Composing Programs:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)
SICP 解题集:对于书后的习题,作为初学者应尽力并量力完成。
完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。
关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,Mega Project List 中选取项目。总之,务必在这时拿下你项目实践的第一滴血。
与此同时,别忘了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):
计算机系统基础
有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:《深入理解计算机系统》 Computer Systems A Programmer's Perspective。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 CMU的「计算机系统导论」的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执行」为主线,全面阐述计算机系统内部实现的诸多细节。
如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: The Hardware/Software Interface,这门课的内容是 CSAPP 的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看 The C Programming Language,回顾一下C语言的知识。
完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络->内存->缓存->CPU的流向。
此外,也是时候去接触 UNIX 哲学了: KISS - Keep it Simple, Stupid. 在实践中,这意味着你要开始熟悉命令行界面,配置文件。并且在开发中逐渐脱离之前使用的IDE,学会使用Vim或Emacs(或者最好两者都去尝试)。
阅读 《UNIX编程环境 》
阅读《UNIX编程艺术 》
折腾你的 UN*X 系统
数据结构与算法基础
如今,很多人认为编程(特别是做web开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的「码农」思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。
数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么。
供你参考的学习资源:
《算法导论 》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《数据结构与算法分析》
Coursera Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;英语没过关的:麻省理工学院公开课:算法导论
入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《编程珠玑 》,《程序设计实践 》
编程语言基础
Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet
- The Pragmatic Programmer
此外还要知道,学习第n门编程语言的难度是第(n-1)门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme/Racket 三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。但有这么一位你躲不开的,必须得认识的大伙伴 C++,你得做好与他深交的准备:
入门:C++ Primer
[可选] 进阶:
高效使用:Effective C++
深入了解:《深度探索C++对象模型》;C++Templates
研究反思:The Design and Evolution of C++ ;对于C++这个 Necessary Evil ,看这本书可以让你选择是成为守夜人还是守日人。
现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。
供你参考的学习资源:
《程序设计语言-实践之路》:CMU编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。
Coursera 编程语言MOOC:课堂上你能接触到极端FP(函数式)的SML,中性偏FP的Racket,以及极端OOP(面向对象)的Ruby,并学会问题的FP分解 vs OOP分解、ML的模式匹配、Lisp宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。
Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器其实就是一个javascript和html的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个 Scheme Interpreter
其他
编程入门阶段比较容易忽视的几点:
学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。此外英语的重要性更体现在沟通交流上,Linus Torvalds一个芬兰人,一口流利的英语一直是他招募开发者为Linux干活的的法宝,这是你的榜样。
学会提问:学习中肯定会遇到问题,首先应该学会搜索引擎的「高级搜索」,当单靠检索无法解决问题时,去Stack Overflow 或知乎 提问,提问前读读这篇文章:What have you tried?
不要做一匹独狼:尝试搭建一个像这样简单的个人网站,不要只是一个孤零零的About页面,去学习 Markdown 与 LaTeX,试着在Blog上记录自己的想法,并订阅自己喜欢的编程类博客。推荐几个供你参考:Joel on Software,Peter Norvig, Coding Horror
小结
以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试「费曼」技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己很多时候当你之后回过头来再看这个问题时,一切豁然开朗。
此外不要局限与上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。The Pragmatic Programmer 就是这样一本程序员入门书,终极书。有人称这本书为代码小全:从DRY 到 KISS,从做人到做程序员,这本书教给了你一切,你所需的只是遵循书上的指导。
后记
如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些「复杂」的API,更不会畏惧学习具体的技术,甚至感觉很容易。当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,看老师同学和 csdn 的眼光会变得非常微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。
专题推荐: