本文目录一览:
请问自学编程,怎么才能做到让自己成功学习顺利,并且一个明确的计划或者方向(包含各个阶段的进级)
如果能重学一次编程,会怎么规划自己的学习路径?
大部分人重新回顾自己的学习编程的经历,往往会发现自己走了很多弯路,踩了很多坑。或许是一本久负盛名的书,花了很多精力看完之后却发现名不符实;或许是追求一些时髦的新技术,却发现竹篮打水,镜花水月;或许是听信了一些一面之词,因傲慢和偏见而固步自封;或许是对某些看上去艰深晦涩的领域心存畏惧,导致无法理解很多问题的本质……
所以本期话题的主题为如果能重回初学编程的时候,会怎么规划自己的学习路径,希望大家分享自己的故事。
为了避免大家出于个人的认同而不是对于内容本身的认同来点赞,所以从本期开始,所有参加话题的参与人的身份将会匿名,直到话题结束后才公开显示ID。请大家也遵守该项规则,不要猜测回复者的身份或是主动暴露自己的身份。
大学的时候,军训结束后开始正式上课了。终于要学编程了,好激动!我也要像传说中的黑客,噼里啪啦敲一顿键盘,世界便尽在掌控之中……上课的前一天,领到了崭新的编程教材,我兴奋地睡不着觉,熬夜用手机的补光灯照着看……
命运给我开了个玩笑,这本书的作者叫谭浩强,据说,这书里面每一页都有错误。等我发现的时候,我只好重新学了一次C语言……因为我对于C语言的理解几乎都是错误的……
顺便一提,我重学选用的书是:C语言程序设计:现代方法。
经过C语言的教训,我发现看一本烂书不如不看。这时来到了大二,开始学习Java了。这次我再也不信国内的那些大学教材了,豆瓣上搜了下,发现评分最高的是Java编程思想,评论都说好。果断买买买,奉为圭臬,每日研读。
这次我的Java确实学的不错了,期末Java大作业的时候,大部分人还在懵逼的时候我脑子里面已经知道该怎么实现了。最后大家发现我很靠谱,于是整个小组把写代码的任务都交给我了(大作业除了写代码还有写文档之类的杂活),我也不负众望,一个通宵搞定,感觉自己强无敌。
然而等我到了工作中的时候发现了两个问题:
第一,Java编程思想成书于2006年,主要讲的还是Java SE 6,然而等我工作的时候,Java SE 8已经推出,并以疾风骤雨之势成为了大部分的公司线上环境。而Java SE 8的引入的诸多新特性以及SE 6和7里面的废弃不用的类和方法,也需要花时间重新学习和整理。语法的特性还好说,在这个技术和思想日新月异的年代,一本十年前的语言入门书,可能里面潜藏着很多初学者不容易发现的过时的思想,这才是真正致命的。
第二,Java编程思想只是帮你入Java SE的门,离工业实战开发还有很长的一段距离。公司中版本控制用的是GIT,包管理用的是Maven,类的命名原则,代码重构,以及流行的Java EE和Spring框架等等知识都没有提及。我毕业的时候根本不知道这些,导致了我找工作的时候吃了很多亏。这些东西只好在工作中一点一点重新学起,当然,还包括重新学习Java SE 8……
实际上,Java编程思想已经过时了,虽然豆瓣上评分一片大好。这里我推荐的是最新版的Java核心技术。
另外我发现,Amazon美国上搜Java排名第一的是一本2014年出版的书(基于 Java SE 8),然而国内的Amazon搜索Java,排名第一的仍然是Java编程思想。可见国内仍然很多人在Java SE 6上浪费时间……
我现在选书的几条原则:
大家的评论,以国外的书评网站为主,评价不好的千万别看
讲的是否技术已经过时,优先选择最新出版的技术书
不要买中文书,除非有特别的理由(国内优质原创技术书,不包括翻译书)
坑2 - 提问和交流
学习和开发总是会遇到问题,遇到问题总是需要请教别人,上哪去请教呢?
单独请教身边的高手:可高手一般懒得理你,如果是查Bug或者非常细节的问题,更是没高手愿意理你。基本上高手只会回答观点性的问题
Q群:大部分都在吹水聊天,提问题基本上没人理,并且Q群里面贴代码的体验很差
CSDN:这下有人理你了,可很多人回答问题都是很不负责任的,并且提问需要积分,然而获取积分又非常麻烦
SegmentFault:比CSDN的体验好很多,提问也不需要积分,国内比较专业技术问答网站
国内差不多就这些方式了,直到后来我发现了StackOverflow。不好意思,上面都是垃圾。然而StackOverflow是用英文交流的,好多编程术语都不知道,怎么玩?后来,我发现问题的本质在于,看的技术书是中文的。
因为看的技术书是中文的,所以只知道这些技术的中文说法,只能和中国人交流,然而编程的世界的语言却是英文。第一,大部分项目的文档和介绍都是用英文写的。第二,GitHub上交流用的也是英文。第三,语言和协议的标准也都是用英文写的……
所以,为了和世界接轨,我开始把我学的东西大部分重新看了一遍英文版的书,不为别的,就为积累技术术语,当然也顺便复习一下。所以后来我选书,基本都是在英文书网站里面挑,很少再看中文书了,避免学习术语的成本。况且中文翻译书,翻译质量参差不齐,指不准就看了一本瞎翻译的书,误入歧途。
那么我现在遇到:
有明确答案的知识性问题(比如程序报错,有小Bug之类的),去StackOverflow问。如果还没有得到解决,考虑:
这个问题是否可以通过查阅相关文档解决?
这个问题是否可以通过查阅相关语言和协议标准解决?
这个问题是否可以通过在邮件组里面提问或者项目讨论区(GitHub Issue)里面提问解决?
这个问题是否可以通过自行阅读代码解决?
绝大部分知识性问题,都可以通过上述方法解决,如果这还解决不了,可见你在使用一个没有开源,没有友好的社区氛围,没有什么人在使用的过气技术,应该思考下你用的这个技术是不是该进博物馆了?
没有明确答案的观点性问题(比如某技术的优势或者未来发展趋势之类的问题),可以考虑:
StackExchange的子站点programmers里面提问
Reddit的Programming区里面发帖
看该技术领域里面明星人物的博客或者书籍
请教身边的技术大牛
关注各种技术会议的视频和讲稿
自己思考
观点性质的问题,本没有标准答案,当然会比知识性的问题更难获取答案,可是这些问题,却比知识性问题更加重要。知识性的问题,只有对或者错两个结果,你违背了知识,你会立即得到错误。而观点性的问题,就比如选书或者如何交流,如果没有自己的一套方法或者错误的方法,就会原地踏步乃至于南辕北辙。
坑3 - 赶时髦
搬业务代码的过程中,学了很多库的用法,比如说HTTP相关的用过Java的HTTPClient和Python的requests库,写并发会用并发的库,写TCP会用Socket相关的库,做Web用过NodeJS和PHP等……发现很多框架也不难学习,于是折腾了更多的新框架和新语言(Go、Rust)……然而一路折腾下来感觉就是不生产代码,只是做了一把框架的搬运工,搭个架子然后吭哧吭哧写业务代码。最后发现追求新技术有两个问题:
第一,用户并不会在乎你用的什么技术,只要他们用着爽就行了。而这往往会意味着,赶时髦的新技术会因为不好招人以及担心有坑而导致不会被公司采用。
第二,搬运框架并不会真正提升你的技术,除非你能理解整个框架的实现,到源码级别的掌控。
所以赶时髦并不会让你升职加薪,也不会真正提升你自己的技术,那么到底该学什么呢?
学习路径
有篇很有名的文章,Teach Yourself Programming in Ten Years,认为编程专家需要10年的学习时间。并且给出了一些学习目标:
学习十来门语言
参与(有技术含量的)项目开发
维护(有技术含量的)项目
对计算机底层的了解
参与制定一门语言的标准
等等。这些学习目标我也认可,但是比较抽象。
有一份比较实际一点的文章,程序员练级攻略(这篇文章有个坑,它推荐了W3School,实际上W3School是一个过时的有很多坑的网站,我比较推荐movethewebforward)。
这里我谈一下我自己的学习规划:
学几门流行的编程语言,当然需要找一本靠谱的英文书来学。学习的目标在于熟练使用大部分语法特性以及相关的库函数,也包括引入第三方包以及调试优化等内容。学了之后也可以适当看下中文的技术书,方便中文技术交流。
学习编程相关的开发工具(IDE,版本控制,文本编辑等),提高自己的开发效率。
成为一名熟练的框架搬运工,比如搬一下Linux+Nginx+Mysql+PHP搭网站,ELK搭一个日志收集查询展示系统之类的。这些技能只需要阅读下官方文档的就行了。
阅读语言和协议的标准,参与一两门技术的发展和讨论
学习操作系统和编译原理,了解语言和协议设计的背后的思路,了解计算机的底层到应用层之间的实现,包括网络并发等领域
目前我只做到第三步……我目前正在看一些语言和协议的标准,以及学习操作系统和编译原理等……
2016-09-12 00:43:45 6条评论
isaacpei, ifelse程序猿
首先说明我讨厌固定的方法
每个人都是不同的,各位大牛也应该有自己的方法,比如教教学生啊,睡前读两章啊,打打炉石啊。。。 所以我所说的,可能有用,也可能是扯淡(当然我就是爱扯淡)
学习路径我认为是一个迭代加深的过程
学习-使用-学习更深入-使用更深入
以下使用入门举例
从入门来讲,语言我还是觉得两个比较好C/Python 。
对于入门书籍的选择,我觉得无所谓,很多人喜欢比较谁的书写的好谁的写的不好,但是不同人有不同的偏好,我觉得意义不大。你能找到的书基本都不会错太多,就算是谭浩强也有无数人看着他的书学会了不少再回来批判他,当然现在他的书已经不多见了。事实上大部分学校的教科书都能达到基本的要求。
入门很简单,C语言看到指针前面,这就够了,我看的是c bible,就是C作者写的那本。
Py也很简单,更加接近自然语言,我是看的learn python the hard way。
甚至某种语言官方文档也是很好的入门资料。
想了想即使到现在这两本也足够入门,简单易懂。
我不理解有人喜欢推荐那种又厚又重,未定义行为都讲一遍的书,这种东西既没啥重要性又不适合入门,看起来真是痛苦。
至于书是中文还是英文,我也觉得无所谓,但是最终要看一遍英文。如果你先看的中文,之后一遍英文的也是十分简单的事情,顶多几个小时。
学习完之后就到了使用阶段
随便选个oj刷10道水题。
课后习题做了
迭代这个过程
再往后我就不讲了,因为我水平就到这里了~
使用工具
书是工具,但是我觉得有点过时(因为我懒得看)。
我觉得现在更好的工具是网络。
个人喜欢直接搜遇到的问题,blog就是很好的地方,stackoverflow也是。
使用工具最重要的问题是选择适合自己的,比如blog搜出来靠前的可能讲的并不是很适合自己的阅读习惯。
正确使用工具是及其重要的能力。
实用主义
我不是理论派,我喜欢讲学以致用,如果没啥用但是好玩也行,去解决问题就是从学到用的过程。
个人认为大部分程序猿都是在这个阶段学到大部分东西的。
比如:
题目tle了,那么可能你会因此学了某种高效算法。
需要做大作业了,那么可能你因此仿写了2048,学会了js里面的动画。
踩坑再爬出来就是提升
总有人喜欢给后面人说自己遇到了多少坑以后别碰。但是我觉得对于学习,踩坑是货真价实的提升。
卧槽我懒得继续写了。。。
学习技术还是上个大学把。。。
最后一句话,证明你能力的最重要的地方是:
你解决了这个问题
你把这个东西用傻逼都懂的方式解释清楚了
天天扯图灵机/P=NP的要么是研究理论的要么是装逼的。
技术的发展是为了简单不是为了复杂。
卧槽我写了这么长?
2016-09-13 12:08:56 0条评论
mickeyandkaka,
我认为字数越多,赞数越高,这样的现象是不好的。
战略性的方向:
读个好点的大学的计算机专业
原因不在于学校,在于你接触了什么样的人,什么样的环境,你就会变成什么样的人。这个甚至比你各种努力还重要。
大学逼自己多写代码多刷题。为进入大公司做准备。
只有规模足够大的工资才有平台,才有可能发挥的机会。代码不是为了自我满足,而是要真正服务于千万用户的。除非你眼光毒,不然你赌不起你的时间。
战术性的意见:
兴趣是最好的老师
大学专业课别挂,有点印象。以后好随时捡起来
了解简单的英语
独立思考,解决问题
若都能做到,几无敌手。
我认为对于不同的时代,介绍不同的术意义不大,c++精通的人,难道不能几周学会java、Python、Golang么;大学高绩点的人,相信对于最新的技术也能有所认知并学习精髓。编程是用于工作,工程中迟早会遇到你完全不会的问题,这个时候能帮你的只有解决问题的能力。
随便聊下,不爽你打我呀。
中国黑客水平怎么样
超级NB
1小时内就给“百度受益者”一个很好的答案了。
十分震惊!!2010年1月12日,早上7点起床,百度查一些东西,开始的时候还好用,然而到8点之时,再百度东西的时候百度已然打不开。经调查太原、天津、河南、烟台、长沙、成都、湖北、济南、沈阳、内蒙、厦门、重庆、成都、苏州等数十城市皆反应百度已经残废!
此后长达数个小时之内,百度一直不曾打开,后来有兄弟传来消息,我国的“百度”竟然被黑!!
罪魁祸首乃是伊朗黑客,此网络组织名为“伊朗网络部队”这事在国内网络引起了轩然大波,如此大面积的黑“百度”的行径,显然是对我国“红客”的叫嚣和挑战。
区区伊朗小国胆敢范我天朝虎须,是可忍孰不可忍,这种无异于自杀的行为,激起了中国“红客联盟”展开疯狂反击!!
不得不说“红客”行动之迅速,反应之敏捷,我国“红客”在得知“百度”被黑之后短短一个小时内作出了暴风骤雨的大反击,中国红客联盟病毒木马篡改器如同箭雨一般铺天盖地洒下。
伊朗黑客显然不是中国“红客联盟”之敌,中国红客之中藏龙卧虎,上至四十壮汉,下至十数龄少年,纷纷动手,编制软件程序,一齐黑向伊朗!!
十三亿的愤怒岂同寻常?中国“红客”如下山猛虎,又如出海蛟龙一般,疯狂攻向敌人,中国“红客”出剑便见血,见血必杀敌!伊朗黑客被打得毫无还手之力,甚至连招架之功都欠奉!
刹那间,伊朗全国主要网络皆被攻陷,打开之后都看不见网页内弄,中国红客在其网页上留下天朝不可犯之宣言:
CHINA Honker 中国红客
China do not hear any foreign hacker! 中国不怕任何外国的攻击
The big national power spurs strong corps! 中国是一个有个强力网络火力的国家
we are Oppose the special prganization of 我们会给伊朗以特别的关照
IR
servers refused to visit please wait
中国的五星红旗已经挂在伊朗许多网站的页面之上,中国已经不是百年前的中国,现在的中国是一个强大民主的泱泱大国,飘扬在伊朗网页上的五星红旗不仅仅昭示我国“红客”的强力!更昭示着如今中国国威不可欺!!!!
让小伊朗洗干净脖子好好承受我华夏大国的愤怒吧!!
目前百度各大贴吧依旧没有正常运行,“红客”也正在紧锣密鼓的筹划后续之事!兄弟们现在他们需要我们的声援!!
穆子木不才,以区区文章表达心中爱国之情献绵薄之力!助“红客”之势!
圣战已经开始!大家一起声援我们爱国“红客”!!让他们知道我们跟他们是站在一起的!!
网络黑客指的是什么人?
“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。有一群人,他们大声嚷嚷着自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做“骇客”(cracker),并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客, 正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把“骇客”当成黑客;这种做法激怒真正的黑客。
根本的区别是:黑客们建设,而骇客们破坏。
在百度上可以搜到。
电脑病毒有几种,各有什么危害?
1、最初"计算机病毒"这一概念的提出可追溯到七十年代美国作家雷恩出版的《P1的青春》一书,书中构思了一种能够自我复制,利用通信进行传播的计算机程序,并称之为计算机病毒。
2、贝尔实验室的三位年轻程序员也受到冯•诺依曼理论的启发,发明了“磁芯大战”游戏。
3、1983 年 11月,在一次国际计算机安全学术会议上,美国学者科恩第一次明确提出计算机病毒的概念,并进行了演示。
4、世界上公认的第一个在个人电脑上广泛流行的病毒是1986年初诞生的大脑(C-Brain)病毒,编写该病毒的是一对巴基斯坦兄弟,两兄弟经营着一家电脑公司,以出售自己编制的电脑软件为生。当时,由于当地盗版软件猖獗,为了防止软件被任意非法拷贝,也为了追踪到底有多少人在非法使用他们的软件,于是在1986年年初,他们编写了“大脑(Brain)”病毒,又被称为“巴基斯坦”病毒。该病毒运行在DOS操作系统下,通过软盘传播,只在盗拷软件时才发作,发作时将盗拷者的硬盘剩余空间吃掉。
5、1988年11月美国国防部的军用计算机网络遭受莫里斯病毒袭击,致使美国Internet网络上6000多计算机感染,直接经济损失9600万美元。莫里斯病毒是由康乃尔大学23岁的罗特•莫里斯制作。后来出现的各类蠕虫,都是仿造了莫里斯蠕虫,以至于人们将该病毒的编制者莫里斯称为“蠕虫之父”。
6、1999年 Happy99、美丽杀手(Melissa)等完全通过Internet传播的病毒的出现标志着Internet病毒将成为病毒新的增长点。其特点就是利用Internet的优势,快速进行大规模的传播,从而使病毒在极短的时间内遍布全球。
7、CIH病毒是继DOS病毒的第四类新型病毒,CIH这三个字母曾经代表着灾难。1998年8月从台湾传入大陆,共有三个主要版本:1.2版/1.3版/1.4版,发作时间分别是4月26日、6月26日、每月26日。该病毒是第一个直接攻击、破坏硬件的计算机病毒,是迄今为止破坏最为严重的病毒。
CIH病毒制造者 陈盈豪 曾有两次精神科门诊记录,被人们认为是“电脑鬼才”。
8、2000年的5月,通过电子邮件传播的"爱虫"病毒迅速在世界各地蔓延,更大规模的发作,造成全世界空前的计算机系统破坏。 I LOVE YOU爱虫病毒是使用VB Script程序语言编写的病毒,它主要是通过一封信件标题为“I LOVE YOU"的电子邮件传播的。一旦执行附加文件,病毒会获取Outlook通讯录的名单,并自动发出“I LOVE YOU”电子邮件,从而导致网络阻塞。破坏性:爱虫病毒的传播会导致网络瘫痪,病毒发作时,还会把*.mp3、*.jpg等10种文件改为*.vbs,并传染覆盖这些文件。
与爱虫病毒相似的网络病毒还有Melissa(美丽杀手病毒)等。
9、著名的“黑色星期五”病毒在逢13号的星期五发作。
10、2001年9月18日出现的Nimda病毒则是病毒演变过程中的另一个里程碑,它首次利用了系统中的漏洞对互联网发起攻击,具备了典型的黑客特征。它的出现意味着,混合着多种黑客手段的病毒从此诞生。
尼姆达是一种新型的、复杂的、发送大量邮件的蠕虫病毒,它通过网络进行传播。尼姆达病毒总是伪装成一封主题行空缺的电子邮件展开对计算机的侵袭。打开这封“来历不明”的电子邮件,就会发现随信有一个名为readme.exe(即可执行自述文件)的附件,如果该附件被打开,尼姆达就顺利地完成了侵袭电脑的第一步。接下来,该病毒不断搜索局域网内共享的网络资源,将病毒文件复制到用户计算机中,并随机选择各种文件作为附件,再按照用户储存在计算机里的邮件地址发送病毒,以此完成病毒传播的一个循环过程。
11、2002年,求职信Klez病毒,邮件病毒,主要影响微软的Outlook Express用户。
12、“附件在哪啊?你找到我吗?放心打开来,这是一个重要文件,可以查杀QQ病毒的专杀工具请查收附件。”如果你收到一封这样的电子邮件,千万不要打开,这是国内第一例中文混合型病毒,会导致电脑里的各种密码,包括操作系统、网络游戏、电子邮件的各种密码被窃取。
13、冲击波,2003年8月11日,冲击波席卷全球,利用微软网络接口RPC漏洞进行传播,造成众多电脑中毒,机器不稳定,重启,死机,部分网络瘫痪,没打过补丁的WINDOWS操作系统很难逃出它的魔爪。
14、震荡波:具有类似冲击波的表现形式,感染的系统重新启动计算机,原因是给蠕虫病毒导致系统文件lsess.Exe的崩溃。
15、小球病毒,作为Dos时代的老牌病毒,它也是国内流行起来的第一例电脑病毒。小球病毒可以险恶地控制电脑,使程序运行缓慢甚至无法运行。
特洛伊木马,一经潜入,后患无穷
据说在海湾战争中,美国防部一秘密机构曾对伊拉克的通讯系统进行了有计划的病毒攻击,一度使伊拉克的国防通讯陷于瘫痪。
1、MSN小丑(MsnFunny),自动向用户的msn发送消息和病毒
2、Word文档杀手:破坏文档数据,记录管理员密码。
3、雏鹰(BBeagle):木马程序,电子邮件传播,监测系统时间,2004年2月25日则自动退出。
4、好大(Sobig):1分钟300封病毒邮件
5、红色代码(I-Worm Redcode):感染对象,服务器,修改服务器网站网页
6、蓝色代码(Bluecode):启动多个进程,系统运行速度非常慢,cpu占用率急速上升,甚至瘫痪
7、密码杀手2004:通过键盘记录技术截取几乎所有登录窗口的输入信息,通过电子邮件发送给病毒作者。
8、挪威客(Mydoom.e):疯狂发送带毒邮件,随机删除计算机数据。
9、网络天空(Netsky):带毒邮件大量传播,消耗网络资源,影响企业的邮件服务器
10、武汉男生:qq发送诱惑信息,盗取传奇密码以邮件形式发给盗密码者,并结束多种反病毒软件。
11、证券大盗(PSW.Soufan):特洛伊木马,盗取多家证券交易系统的交易账户和密码。记录键盘信息的同时通过屏幕快照将用户资料已图片形式发送。