写给4年前开始编程序的自己
最近在网上看到有人写了一篇关于《写给4年前没有开始做设计的自己》,突然也想写这样一篇文章。具体那篇文章的内容我并没有细读,防止自己的思路照着他的来。
首先,我先简单介绍下自己,好为后面的内容做一个铺垫。我今年23岁,内蒙古人,今年6月将于粤东地区韩山师范学院毕业,软件工程专业。
一、如果可以,你应该去学文学或者经济学、或者其他你喜欢的专业
这样的建议并不是因为计算机专业不好,或者不适合。行业内普遍认为IT人士在同年龄的白领中是比较辛苦的,加班现象是大多数互联网公司中常见的。且长时间从事计算机相关工作,对健康也是有一定害处。如果你不信可以看看你现在的自己和四年后的我的这两张脸。明显苍老了不止4岁。长时间坐在电脑前也会引发颈椎病,当然如果你坐姿可以调整好的话,也可以避免这个问题。如果你想要一个好的身体和白白净净的脸,还是换行吧,别那么倔强。
二、你该如何去学计算机
四年前开始学计算机的你,充满了自信,做事情分得清轻重缓急,抓得住方向。但是你的过于自信造成了我今天的知识面狭窄,只会做网页的状况,且你没有给予一些重点学科予以重视。
你觉得数学没什么,编程时很少会涉及到复杂的算法,就算涉及到,你也能够解决,只是付出的时间多一些。简单的递归和排序对你不是问题。我要告诉你,你错了。计算机之所以可以发展到今天,就是因为数学,其根本原理就是基于数学。是的,编程时你很少会涉及到使用书中的数学知识,但当你想涉及底层或高效率编程时,你的数学会让你寸步难行。
你觉得英语没什么,编程时很少会涉及到复杂的单词,就算涉及到,你也可以金山词霸,只是动几下手指就好了。简单的变量命名规则对你不是问题。我要告诉你,你错了。大多先进新的技术资料均是源于美国等发达国家,且相匹配的文档书籍也是英文的。是的,你可以去看中文翻译版。但是我要告诉你,不是所有的书你都可以找到翻译版,不是所有的英文网站你都以用谷歌翻译;在你研究一项新技术的时候,苦无资料的你只能去一个次一个词的翻译国外文档或书籍。
三、别去听老师讲课,你可以大胆的逃课
当然,前提是你要保证不要挂科。国内的觉得多数学府,其主要任务在我看来不过是所谓的“科研”。这里我加上引号的意义很明显,大学根本就没有交出它本应交出的科研成果,所以一切都是走形式。是的,是走形式。老师的工作重点是考职称,系辅导员的工作重点是不要出什么乱子,执行书记的指示,然后把你当做是一个高中生一样圈养。大学里的老师,也很少有真正有学识的。打个比方,可能教你数据挖掘的老师自己都没有去挖掘过,可能只是在家里拿个小铲子挖挖花盆罢了。当然,不能排除有真正好的老师,但真的是可遇而不可求。即使你遇到了一个很有学识的老师,大多数情况下,他也是个不会讲课的老师,或者是个精力不在教学的老师。
所以,你要大胆的逃课。图书馆是你的将要泡的地方,你可以把他当做是你的女朋友。她能提供给你大多数你想要的,只要你能静心研读。其实,你完全可以利用两节课的时间去看老师用四节课讲的内容。
四、别总是做一样东西,去广泛涉猎吧
大一时你给自己定向PHP,这是一个不错的决定,并且也因为这个觉得,即将毕业的你也找到了一份不错的工作。但是我要告诉你,不要总是PHP。我承认PHP让你学到了很多,甚至通过PHP使我学到了脱离语言本身的东西。我也并不是说长时间的编写一门语言会怎样怎样,很多大牛都说语言无关(关于这个观点,后面我也说说自己的观点)。真正的弊端是,长时间的网页开发会造成你的目光短浅,无视其他平台的优越性,知识面狭窄。如果你能做到更多的平台,我相信你会对编程本身有一个质变的理解。
五、你要坚决抵制微软平台
其实你已经这样做了,但是还是要说一下。微软是一个垄断性的企业,其WINDOWS流行程度虽然降低,但他仍然是PC操作系统的龙头老大。微软为实现其垄断梦,采用傻瓜编程的方式,蒙骗了大多数微软平台程序员。你用.net去开发一个网页,甚至不需要自己去写HTML,只需要用VS去画就可以了。是的,这样很方便。你用.net实现MVC只需要按照它的框架即可。是的,这样很方便。
但是我要问你,你知道你所画出来的网页本质是什么?如果我要你实现一个复杂的JS效果,你在它复杂的类库中找不到对应的类的时候,你该怎么办?
我还要问你,你知道MVC的本质是什么吗?M、V、C分别是什么?有什么优点缺点?意义何在?
如果你走上了这条路,毫无疑问的,4年后的我只能呜呜呀呀的说的大概吧。呵呵,幸好你没有走上这条路。
六、大学学的是什么
这段应该不是写给四年前的我,只是比较有意义,所以决定写出来。因为大一的时候我已经明白了这个道理。
大学并不是高中,没有老师会整天抓着你学习,管你吃喝拉撒。一切都是靠你自己。学习也是一样。大多数老师是不负责任的,上完课布置个神马作业然后走人。如果你不想白读这个大学,那么你要开始自学,并且学会自学。
有些人会说,我很笨怎么办?我不会自学怎么办?
首先,我觉得没有人是笨的,除非你是弱智。即使是弱智,我依然认为你不是笨的。为什么这么说呢,我是一个极端的人,我相信主观因素可以克服,只要你有足够的自信,并且付出足够的努力。当你决定要做一件事,并且客观上是有可能成功,而你却失败了的时候,我只能说是你自己付出不够努力,不是天不下雨天不刮风的原因。
其次,自学其实没有你想的那么难。只要你有书,只要你有电脑,神马都是浮云。我的意思是没有什么问题是解决不了的。即使是在你一窍不通的情况下让你去搭建一个邮件服务器,给你书和电脑,只要你肯努力,肯定是可以做到的。谷歌百度是你自学的莫大助理。想想互联网搜索还没有星期的90年代,如果你碰到一个问题,除了翻查书海和问人几乎没有更加便捷的办法。所以,你要庆幸你活在这样一个时代,感谢互联网用户。并且一直秉承着:form the Internet,to the Internet的精神。
最后,关于语言无关性,我想说说自己的观点。
很多老师和大牛会提及语言无关性。但是我想说下自己的反对观点。我并不认为这句话是错的,只是觉得不是所有人都有资格说这句话。如果是一个菜鸟,大言不惭的说语言无关性,那可真是笑话了。一门语言都无法精通的人,何谈语言无关性。是的,相同的问题可以同步多种编程语言解决。对于大牛来说,无论使用哪种语言可能都是得心应手,并不是他对所有的语言都精通,而是他已经掌握了编程语言的本质以及编程思想,学习一门新的语言可能只是十天半月的问题。但是对于初学者来说,编程本质与思想,以及对于细节问题的纠结,使他们无法脱离问题本身,而将大部分精力花在语言上,这没什么不值得的。
所以我认为,你可以说语言无关性,但你首先要扛得起“大牛”这两个。
再者,大牛也不要对初学者强调语言无关性,你是在误导他们。等他们真正达到那个境界,这个思想自然就领悟了。
这篇文章被推荐到首页是我没有想到的,文中确实存在过激的观点和个人情绪的发泄,发表当初并没有考虑到这些。如果对于某些读者造成了困惑和不满,在这里我向大家真诚的道歉。
关于文中我补充几点大家争议较大的内容:
1、这篇文章是以现在的我写给4年前的我为出发点,且写文章的时候也一直把我这对自己说话的口吻去说的。语言过于偏激也大多是针对自己,并无恶意。
2、是否应该翘课的问题。我说的太过偏激了,可能是因为在我们学校我没有接触到真正认真负责搞教学的老师,并且即使是上课我也是在下面自习的。其他人的情况可能和我不同,可能真的又值得去听认真去听的老师。如果有这样的老师,当然应该去认真听课。同时也应该通过老师去了解课程和行业,毕竟老师的视野要比我们宽泛的多。大学中我就遇到一个恩师,虽然他和其他老师一样不注重教学不会上课,但他给我提供的机会以及私下里聊天教我的东西足够我受用终生。
3、关于自动化我依然坚持我的观点。我并不是一口否定不应该去使用开源类库、框架等工具,我个人也经常用这些东西,比如THINKPHP,或者其他常用类。但使用这些的过程中,我会尽可能多的去了解其原理。我只是不想做一个局限于某个平台的程序员,希望自己能够接触更多的底层的东西,提高自己。同时我也认为,这是能够区分一个程序员能力的标准。有人有不同观点,我不想争论。正如我所说的,并不是不去使用自动化工具,而是应该在使用过程中明白其原理。
4、学校好坏以及是否有参加工作并不是衡量一个人能力的标准。我承认我的学校说出去没几个人知道,但这决定不了什么。别人高中玩了三年考到我们学校,我用半条命出来拼出个第一,才勉强考上本科,教育水平不同而已。可能你的优越性只是在于你出生在一个比较发达的城市,而我却是生在一个只有200多户人家的山村。但我相信时间会改变一切,我相信。
- 38楼jiakai0419昨天 18:28
- 个人观点:语言无关性,并不误人子弟。
- Re: huyanping1小时前
- 回复jiakai0419n嗯嗯。。这里确实有些偏激。我只是想阐述一个观点:对于初学者,没有资格谈语言无关。
- 37楼linlin125昨天 17:34
- 看了这篇文章,触发很深,当初也是被头说语言无关性,现在真正接触才发现,语言真的很麻烦。作为小白想向您请教,能不能说说前期学好一门语言应该注意什么,应该做什么
- 36楼beijiguangyong昨天 17:32
- 祝都好~
- 35楼zouzf1昨天 17:26
- 呵呵
- 34楼givemekey昨天 17:26
- 内蒙古的人都很直爽,对头,微软很多做法确实让人不齿
- 33楼iralance昨天 17:01
- 如果4年前能看到这个,也许能少走很多歪路。
- 32楼njnu06040715昨天 16:28
- 楼主是在讲如何成为一个顶尖的it开发者,问题是很多人只是用它来谋生而已。。。学校里的学习,很多人只是求过,最多是求个奖学金。工作后的平台,大多数人都只是希望顺利,轻松,而不在于对技术或者语言或者架构有多么精通。
- 31楼redennc昨天 16:13
- 我支持你,做程序要知其然,并知其所以然的观点。原先做php,现在学c语言
- 30楼a137151062昨天 15:39
- 这是感悟,同时也是一种发泄...
- 29楼zyr987503101昨天 14:18
- 。。。。。。。。
- 28楼acm365昨天 14:18
- 写的真好,很支持你,加油,从你身上看到了某种正能量,just do it.
- 27楼luke_3昨天 13:58
- 1、话说学经济、法律的如果读你这个学校的话,情况不会比做软工好。。。不认同我们的专业有劣势,加班是行业所迫,普遍但不绝对,在国内互联网是成熟度欠缺的行业,但在目前的社会环境下,却是相对平等和公平的行业(可以通过在行业top10公司中数民营企业的方法得出)n2、学习方法不予置评,说不完。。。n3、不认同,想说选择老师比在图书馆选书容易,尤其是对涉世未深的学生。。。经过12年教育后各种不同程度被洗的学生n4、同意~除了本学科,还有想关和不相关的别的学科的兴趣点也是不错n5、本人做一个java程序员,周边见闻感想:你要是不主动去了解,学java的也不会深刻认识MVC,C/C++最惨,一知半解然后弄一个不权威的MVC结构。。。。微软也是我很喜欢的企业,讨厌他的时候你想想PC linux、android的那简单粗暴的GUI和android开发者适配机型时的悲催吧n6、觉得更应该补课,科学精神、世界观、方法论。。。等常识性质的东西,never too late to learn~nn语言无关我不知道是哪个大牛说的和什么无关,个人认为是对大师交流间某种想法以讹传讹的一种误读,语言的特性、平台的设计思想都应该能集思广益,即使无关,也不代表不需要了解(当你使用时)和学习(当你直接或间接会涉及某种技术思想时),个人觉得思维方式是应该独立于语言,不过解决方案不但语言相关、还和框架、协议的设计大有关系
- 26楼wanghy1979昨天 11:52
- 数学对于搞计算机科学的人很重要。n对于搞计算机技术的程序员来说真的没多大用。nn什么事计算机科学,什么是计算机技术? 自己慢慢领悟吧
- Re: huyanping昨天 11:54
- 回复wanghy1979n受教。谢谢。
- Re: wanghy1979昨天 12:20
- 回复wanghy1979n虽然微软是个让人不齿的公司,但不代表.net的设计很垃圾。nn使用.net开发不明就里,不知其所以然的用别的开发平台或工具也一样。nn归根结底是用人的问题。nnLZ看问题还是过于肤浅
- Re: wanghy1979昨天 13:53
- 回复wanghy1979n别去听老师讲课nn不要因为你们学校的老师太烂就否决天下所有的老师。这个世界上还是有很多有水平且负责人的老师的。 或者就算水平一般没有很多可以学到的东西,但是也许你学个一两点也许就能终生受用。nn举个简单的例子:大学时教我们数据结构的老师大家都认为其教学水平很一般。但是工作几年后在回头看看,其实他教会了我们一个很有价值的知识,程序的本质——程序=数据结构+算法。 所以我们同学中很少有人会去参与什么语言之争。思考问题也不会局限在某种语言上。
- 25楼ThinkHY昨天 11:14
- 写得不错。关于如何学习计算机和知识面不宽的问题,也许加入一个开源项目和学习一门Open Course都是不错的选择。
- 24楼liu_jia_guo昨天 10:17
- 还没有行业经验的时候,学好编程技术是关键,学技术的时候的确如 aofengdaxia 所说,从解决实际问题入手是最快的
- 23楼zhang_bo_yang昨天 09:44
- 我是个初学者,关于如何掌握编程思想和扩展知识面,可以给我说下嘛,我现在开始看《程序员修炼之道》这本书了,老外写的。O(∩_∩)O谢谢
- 22楼x605940745昨天 09:39
- 从文章可以得出,楼主处于迷茫之中,做事以偏概全,编程方面略懂皮毛,大学四年梦周公之人n如果楼主觉得.net只需动手画出界面即可的话, 只能说明你见过了几个工具而已。n 楼主应赶紧换行业
- 21楼fdsdfdsf昨天 09:34
- “五、你要坚决抵制微软平台”,这条你说的很不对。Windows平台也分高中低程序员。你所谓的“甚至不需要自己去写HTML,只需要用VS去画就可以了”,只是最初级的程序员才这样做。
- 20楼feizeikesi昨天 01:35
- 现在 还没开始工作,就开始喷微软了.哈n韩山师范学院,给你说 要抵制 微软平台吗?
- Re: huyanping昨天 04:08
- 回复feizeikesin貌似你很瞧不起我没毕业就抵制微软。貌似你也很瞧不起我的学校。
- Re: ithzhang昨天 09:29
- 回复huyanpingn谁也没有看不起你,只是不要自己看不起自己。你刚才谈了初学者没有资格谈语言无关性 。那我是不是可以这样认为:初学者没有资格抵制微软,除非你熟悉微软的每一种技术,然后对别人说,微软这些技术太垃圾了,大家都别去学。n任何一个领域都能出大牛,关键是能摒弃浮躁,踏踏实实的去研究。
- 19楼lixinnan18昨天 23:33
- 个人钻研即可,兴趣使然
- 18楼qxawansui昨天 22:59
- 我姐姐和我的班主任都是韩师大毕业的!真巧!
- 17楼wfk2022612昨天 20:06
- [quote=huyanping]回复aofengdaxian感谢您对本文的关注。nn对于平台与自动化的观点...[/quote]n我只想说:我只想说等你毕业后你会发现你打的比方在真正开发中是不存在的!
- Re: huyanping昨天 21:09
- 回复wfk2022612n学习是一种态度,知其然,知其所以然。这是我的态度。与是否有工作经验无关。
- 16楼wuxiliang523昨天 20:03
- 我比较赞同你的观点,不过我是西南大学的学生,我也遇到了最值得我敬爱的老师,我对本专业还是比较满意的,不想转行啊!n哈哈!
- 15楼huyanping昨天 19:44
- 关于我为什么会对微软平台持有抵制态度,一部分是因为我个人不喜欢.net,另一部分是因为http://news.cnblogs.com/n/125808/n这篇文章。nn可能言语之中,对.net的态度引起了.net程序员的不满,在此真诚的道歉。其实我也只是在陈述观点,并没有恶语中伤。
- 14楼sheoopp昨天 19:34
- 学.NET两年了。。虽然学的不好,但是至少我MVC模式的理解是通过学习PHP的YII框架领悟的,至少我在一个公司给他们打实习工时候是J2EE,去面试我只用1个晚上就把serverlet看完,至少和我一起去的人还没看清框架的本质,我就已经知道他的大体实现思想了。n并不想说明什么,只是天朝人都讲做事留一线,说的这么绝对会让一些新人感到迷茫,困惑。无论什么,学到深处自然通。n.NET和JAVA都是一样的,都仅仅是一个平台不是一门语言。这是我们老大和我一直说的一句话。n是的,C/C++才是一门语言
- 13楼gqs519昨天 17:56
- 但愿你再过下个四年不会告诉自己“我是为了混饭才干这个的”
- Re: huyanping昨天 18:20
- 回复gqs519n我确实是为了混饭吃才学这个的。如果您是为了爱好或者理想之类的,那么您确实是一个脱离的低级趣味的人。
- 12楼kakyo82昨天 17:33
- 学习了。
- 11楼aofengdaxia昨天 17:05
- 你写的有些观点,我不是太认同的。n确定一个问题,然后解决问题。在解决这个问题的时候,你就自然而然的学会了算法、数学,甚至AI。千万别孤立起来去学习,比如说学习数学。很多人学习了数学并不能用到计算机方面去。同时,没有指导和目的的学习,效率也好不到那里去。nn程序员从根本上讲,还是一个问题的解决者。所以没有所谓的抵制微软还是抵制LInux,这些都不过是一个平台。如果能智能生成HTML就没有必要去手写,除非智能生成的不够满意。懂得背后的原理和使用什么平台并没有根本的区别。我很难去理解,如果有一个先进的工具可以减少重复劳动,而有人偏偏去要用抵制。没有人今天为了吃饭而去采矿炼铁,为了做一个铁锅。一个道理。集中精力去解决问题,而非那些已经可以被机器代替掉的重复劳动。
- Re: huyanping昨天 17:12
- 回复aofengdaxian感谢您对本文的关注。nn对于平台与自动化的观点,可能我过于偏激,但是目的在阐述一个观点。其实我觉得这也是划分程序员等级的一个重要指标。nn如果一个程序员只会使用应用层的组件,或依赖于类库和框架的话,那么他将很难跻身高级程序员的行列。从事某一方面开发久了都会接触到底层的东西,如果总是一知半解,很难做出高质量的应用。我并不是反对自动化的工作方式,但程序员应尽可能多的了解其原理。n打个比方,网页界面开发。.net程序员只需动手画出界面即可。但如果涉及到浏览器兼容等问题,必定会花费很多时间。相反,如果懂得如何处理HTML,开发人员能够从一开始就避免出现上述问题,并且能够做出更好的用户体验。n自动化工具固然可以提高开发效率,但当我们需要做出高质量的应用时,往往这些工作会显得力不从心。我相信大多数工具存在这些问题。
- 10楼cartier昨天 17:04
- 写的不错,有个性。
- 9楼andyhooo昨天 16:16
- 不错
- 8楼qingtianzimeng昨天 15:32
- 支持下,
- 7楼wudiyi815昨天 14:36
- 没看完,同为内蒙人,支持一个
- Re: huyanping昨天 15:28
- 回复wudiyi815n谢谢
- 6楼heliosswords昨天 14:12
- 你用.net去开发一个网页,甚至不需要自己去写HTML,只需要用VS去画就可以了。nnVS提供的前端生成很多情况不好用==
- 5楼wzg_j前天 10:37
- 一些人总喜欢摒弃别人做好的轮子不用. 而非要自己去做, 结果花了相当的精力去自己做轮子,其做得烂无比, 还自认为噢, 通过我自己做轮子我我知道了轮子的结构, 轮子的材料. 轮子的一些技术性指标. 而最终这样的轮子是难以经得起用户的考验的. 并且还要以自己曾经做过没什么用处的轮子, 去谴责拥有几万顶尖工程师的公司所设计出来的产品. 另外一方面, 某公司设计的产品是为了减轻使用者的所要做的工作, 这本身就是无与伦比神圣的. 一个人用十分钟就把别人写好的轮子装上去, 而另一个人自己去弄自己的轮子, 结果十天轮子都没做出来, 这时候, 这个人对公司来说, 他的产出在哪里呢? 再一个问题, 即便是使用别人做好的轮子, 你也可以去了解轮子相关的知识. 这是自己的事, 与别人无关.
- 4楼graffiti_life前天 10:36
- 顶一个
- 3楼liu4947前天 10:01
- C/C++才是一门语言
- 2楼TaixuDayDayUp前天 19:05
- 怎么感觉现在的我跟以前的师兄一样呢...
- Re: huyanping前天 09:17
- 回复TaixuDayDayUpn泰旭
- 1楼jiajiayouba前天 18:42
- .NET程序员一枚,话说现在HTML应该都会吧?JS、Jquery、AJAX,都是基本知识啊……vs 设计界面,那是加快开发效率的,就像dreamweaver。曾用VIM来写过C程序,那时候才发现,VS的智能提示,太他么人性化了……