程序之路

作者: 学姐段 | 来源:发表于2015-03-23 20:32 被阅读242次

    转自知乎

    ----------3月7日----更新一下---

    1,更改了评论提及的错别字

    2,补充了一些增强连贯性的字,词,句

    3,补完学习使用的材料和想法

    ----------------------------------------

    不是。

    不是痴人说梦。

    一定要相信自己,有你美丽的记忆会令我更加努力-----《ButterFly,数码暴龙第一季片头曲》

    我听过两种传奇:一种是如同摩西这样的反叛军首领,向红海伸出手杖时,海水也要分开一条道路以示对其的尊敬;一种是虽然没有天赋奇迹,却有着突破自身局限的决心和魄力,他们谦逊而克制——人生也许不过是匆匆流往大海的一滴水,而无数人奔腾翻滚向他们终点的历程,却汇成了辉煌壮观的河流珠江。

    首先,我想举例来说明一下。(诚然每个人都是不同的,别人可以不代表你行;但是自然也存在别人不可以你可以,别人可以你吊炸天的情况)。

    第一个例子是我,大二写第一个"Hello World!"程序。

    我是广州人,在珠江边上长大。小时候我们总爱在珠江边上玩耍,或是捉迷藏或是木头开花;累了就要上一碗冻冰,把鞋子脱了脚浸在江水里:珠江水温润而轻柔,那甜甜痒痒的幸福感觉就像——

    可是后来珠江被污染得很严重啊水脏了臭了啊,之前的日子一去不复返,我觉得这完全不能忍啊,于是我就立志要搞环境要把广州变成世界上最干净的城市啊。于是我平时看的都是环保相关的(科普)书籍,高考志愿报也全是环境科学啊环境工程什么的。想想那时候也是蛮屌的,天天觉得自己是个屠龙少年,要跑过去呀呀呀把污染(巨龙)干死,还广州一个好环境(救回公主)。

    可是阴差阳错,因为我的能力有限,最后本科被调剂了到了软件工程,于是就开始我码农的不归路了。我们学校大一的时候不允许带电脑,也正好,我不喜欢用电脑。所以题主你看,我原来不是一个爱IT/CS/代码的人;相反,我也在体验新的生活忙社团的事,我当过班长,学生会成员,漫画社副社长还有一大堆。另外,我们专业90%的人都是调剂而来,我们专业是软件工程不是计算机科学。

    ------------------夹叙夹议-开始----------------

    很多人在之前根本没有想过写代码。有时候走一条路只是恰好而已

    ------------------夹叙夹议-结束----------------

    但是大二上发生了一些事情,我心灰意冷什么都不想做,把学生工作几乎全部都退了,只剩下义工部部长和班主任——我当时就想找一个地方躲起来或者怎样,这时候刚好我们学校有一个叫做“联创团队”的技术团队,是一个很吊炸天的团队,里面要求很严需要一周工作40小时,里面还有带空调的工作室,我想哇这不是恰好么我可以躲在里面其他事都不用想。"联创"是一个很厉害的团队,可大部分朋友进来的时候都是不懂编程的,有大一大二甚至有大三的,此外,里面大部分的人都不是计算机/软件专业的,可他们最后都有了很光辉的前途和未来——你看,像你这样的人并不是少数呢。

    然后那时候我开始在课余时间写了第一个"Hello World!",然后写的第一个完整的程序是模仿WindowsXP样式的计算器,用C#写的,写了3周的时间,觉得超级难,而且最后只支持普通的加减乘除(不支持括号或者表达式求值)还出了很多BUG;之后团队还会有一些算法训练,比如说需要学习排序算法,我当时写快速排序写了1周的时间,在 某大神 一遍遍跟我讲了算法伪代码之后,我写了一个星期最后在测试的时候在Corner Case还是扑街了;还有一些很基础的算法题,比如说用深搜和广搜求全排列和全组合,我写了两周最后还是......扑街没有写出来。

    ------------------夹叙夹议-开始----------------

    与其看书学基础知识,不如上来就是干,不要怂!直接跟着书上的项目做,比如说计算器,然后不懂的地方就抄,问问别人不懂的几行代码是什么意思。学东西成就感是很重要的,最后做出一个可以用的计算器可以开心很久的,我电脑里面现在都有很多我当年写的民工小程序,比如说手机上的图片编辑器,音乐播放器等等,可好用了。

    另外,可以学一些基础算法知识,比如说:了解时间复杂度空间复杂度什么的,基本排序算法,搜索算法什么的。

    ------------------夹叙夹议-结束----------------

    可是我倒没有什么很沮丧的感觉,因为:

    第一啊,我基础就是差啊可能人也是比较笨,这是都是事实要正视,埋怨也没有办法嘛;

    第二,我这个人有个很大的优点,就是比较能吃苦也比较勤奋,所以遇到不懂的问题我可能愿意熬夜花很多时间去思考,笨鸟已经晚飞了,就只能靠勤能补拙了,亡羊补牢为时未晚嘛;

    第三,我这个还有一个很大的优点,就是主动坚持执着,遇到不懂的我就去问丝毫不虚啊,别人烦了我就换一个人问,我就是不懂没办法啊。

    第四,我当时也没地方去就想在团队的工作室呆着感觉也还是很赞的,认识了很多大神,他们都有传奇的过去,也有灿烂的未来。

    ------------------夹叙夹议-开始----------------

    做人最重要,就是执着啊

    ------------------夹叙夹议-结束----------------

    我的编程能力第一次飞跃(相对于自己),是在大二下的时候,在团队接了一个外包项目,做一个网站,缺一个前端,我就上了啊,但是我那时候几乎什么都不懂。不过我们有一个很好的PM ,前端也超级屌,不停地教我我不停学学学;另外,跟我搭配的后端是一个才华横溢的长发帅哥(此人单车技术超神能在45度坡高速直下,双手放把同时潇洒吃凉面;后来觉得学IT只能帮到一小撮人,便转行学经济觉得如此才能经世济国。最后考上了北大经济系研究生——这让我想起了鲁迅,真是吊炸天)。上手真正的项目真的会很大帮助的,钱很少的,主要是学习为目的:PM不停给我们反馈给我们检查代码,而且最后做出来成就感真的很强很强,也很累,经常做到凌晨。

    ------------------夹叙夹议-开始----------------

    上项目上项目,不要只学习不实操。不要担心出错,谁手上没有几件血案。而且一定要相信自己,信心真的很重要很重要。坑的人多了自然水平也慢慢上来了。

    ------------------夹叙夹议-结束----------------

    于是我觉得自己:哎哟 不错噢。觉得写代码好像也不错的,以后赚钱了也可以投资环保领域嘛不一定非得要自己投身做环保科研才能改善广州环境。后来又参加了一些比赛,成绩也还不错。关键是信心起来了,我觉得啊啊啊啊卧槽我又是那个屠龙少年了,我肩膀有两块空地,那就是勇气与毅力,我要做代码上的皇帝哼哼哈兮哼哼哈兮哼哼哈兮哼哼哈兮。

    后来出国读书,在美国一所叫做Carnegie Mellon Unvi的学校读了个Master,现在去了美国西部旧金山一间叫做Twitter Inc.的公司去写代码。现在呢自然不能算什么人物,可过得也还不错,人要知足嘛,比如说我现在去饭店点一个新疆大盘鸡或者蒜泥白肉,饭后再要一杯最大杯的椰子奶茶,那还是毫无压力的。或者吃煎饼果子加10个蛋,我要一个打10个!

    ------------------夹叙夹议-总结----------------

    一定要相信自己,比如说像我,天赋不太好人又贪玩是没法在编程领域登峰造极的了。可我勤奋啊,我努力啊,我相信自己啊,现在也还是过得不错嘛。

    切记又付出才有收获,一定要努力要勤奋。

    ------------------夹叙夹议-总结---完----------

    直到现在我每次回广州都会沿着珠江的绿化带跑步,从会展中心到珠江新城的花城广场。我爱珠江,多情的母亲河。

    第二个例子是我的朋友,大二下写第一个"Hello World!"程序。

    他是数学系的,大二下之前没有任何编程基础,甚至对编程一点概念都没有。

    我觉得我和他简直是经典传奇的相遇(;也正如无数俗套的故事一般,最后我和他也有了经典传奇的诀别。)

    那个夏天,武汉的夏天,炎热而焦躁,我来到工作室,除了惯例地看到长发帅哥和组长,还看到一个瘦小的背影?在面试么?我不由得在门口站住了,我还是先不进去免得打扰了他们罢。

    “你之前写过代码么?”组长问,“或者说你有过编程基础么?”

    瘦小的背影头是微微低着的,听了这个问题肩膀不由得抽动了一下;他深吸了一口气,似乎只有这样才能让自己说话平稳一些:

    “没有。”

    “你是大二下对么?”

    瘦小的身影肩膀抽动得更加厉害了:

    “是的。”

    “你为什么要加联创呢?”组长问,“你为什么现在才要加联创呢?”

    瘦小的身影很不安,局促地搓着手。他缓缓抬起来了头,好像鼓起了很大的勇气,他说:

    “我喜欢一个女孩,我喜欢她已经很久很久了;她喜欢玩游戏,喜欢玩很久很久了;我想给她写一个游戏,想了很久很久了。”

    卧槽,这是哪门子的破理由,我竟然忍不住在门外笑出声。

    他惊诧地猛然一回头看我,夏日的最后一抹余晖直直地照在他的脸上,眼里,再反射到我的眼中:血红而执着。

    我不禁退了半步,我这笑实在不应该,我才刚来说不定之前他们还聊了很多东西很多问题,这句话在我看来突兀至极也许只是因为我不知道上下文,我张嘴,正想说对不起对不起对不起——

    “让他进来吧。”长发帅哥说,“让他进来吧。”

    “这......”组长有些迟疑。

    “我会成为传奇的。”瘦小的背影转头看向窗外,阳光射进来铺在地毯上,映下他的影子。

    于是他进了联创——他甚至整个人搬进了工作室,买了睡袋躺椅昼夜不息在工作室学习;兴起之时甚至一周都没有下过楼,饭都是订的或者我们帮他带的。

    他开始学习编程,据说他一年的代码量压过别人四年。大三下就拿到了创新工场的实习,写Android;然后是百度的offer,再去了一些著名的创业公司,现在正在自己创业(同时还在北京开了一家火锅店)。

    ------------------夹叙夹议-总结----------------

    所以题主你看,有比你晚接触编程的人呢。

    可我们都很坚持。也许只是因为性格也许是为了一个女人,这不重要,重要是坚持。

    我们还很勤奋。

    ------------------夹叙夹议-总结----------------

    光坚持和勤奋是不够的,很重要的是路也走对。

    路若是不对,走再远只是错更多,累死也是枉然。

    路对了,如雷军所说,站风口上,猪也能飞上天。

    我还想写写合适的学习道路(仅仅是个人观察以及实践经验,不代表是最好的),可是现在晚了,只能下次再写咯。

    ---------------------3月7日更新开始-------------------------

    "哎唷 代码谁教你的啊?"

    "哎唷 我生下来就会啦 你不知道啊?"

    “哎唷 屁啦!”

    ---- 改自周杰伦的《红模仿》,很好听的,没听过的话强烈推荐听一下!

    (几乎)没有人天生就掌握写代码技能的,所以当你看到一个人写代码很厉害啊,也许你没有见过他初学的痛苦和彻夜的思考;也可能他们只是不愿意说。

    有些程序员让我很迷惑,他们自以为是,在井底做着白日梦,从未认清天地有多大,边偏安一隅边强调自己天赋过人——

    可有些程序员我很喜欢,他们谦逊而忍耐,也许因为这样那样的原因暂时编程能力不强,可是却始终有着突破自身局限的决心和魄力——他们注定会成为优秀的程序员。

    退一步说,即使一个人天赋真的不好,基础也很差,比如说我吧,可我必须要编程要写代码,这该怎么办呢?难道我就说不行了我要放弃?

    也许我们还有更好的选择:这些都是事实,都不可改变了已经发生了。我们也许可以去尽力改变能够改变的,在当前情况下尽自己最大的努力去得到一个最好的答案。这就好比,受限于天赋或者什么的,我在练马拉松,我这辈子也许都跑不过威爾森·克伊普,(卧槽非洲哥哥真是吊炸天啊,马拉松的平均速度尼玛跟我骑单车差不多了),但是我还是觉得我自己跑步蛮不错的啊!我不能说因此就说干不过了我不练了不跑了。

    下面的路线和建议,是针对像题主这种风格情况的人。设计方案什么的,需要具体问题具体分析,所以我给出的路线和建议,对于很多人是不一定适合的——可我相信很适合许多对编程没有概念并且心存畏惧的初学者或者非本专业人士。并且,请随机应变,以下路线仅适用于初学阶段,过了该阶段之后请自动抛弃并且进化。

    首先,是材料问题。

    一,不要买英文书。原因如下:

    1,英文太难了。

    诚然翻译本可能会失去原文的真意意蕴,甚至会曲解文意影响理解。可是我做个比喻:翻译就像别人把饭放到嘴里嚼一嚼,嚼得烂一点了再吐给你吃。也许别人嚼过的东西不正宗,但是基本情况大多数人读英语就是很吃力的,这就相当于牙不好甚至没牙没法咀嚼——在考虑食物好不好吃的之前我还是比较关心会不会饿死。技术书籍本来就晦涩,我见过太多的人瞅两眼就放弃了,如果是英文的话就更加晦涩了;而且我等下推荐的书籍也会小心绕开非英文书籍的可能产生的问题。

    2,现在其实也很多优秀的中国国产书籍。比如说 @周筠 老师,他们出版社就有很多好看的书籍,也可以考虑一下。

    3,英文书好贵的,看题主是个学生,省着点花好。

    二,不要买那些经典名著,比如说《CSAPP》,《TAOCP》(没听过也就更加没关系了)之类的,比如说这个问题里面的,你读过最好的计算机书籍是哪一本? - 编程,通通不要买。原因:

    书是好书,可是太难了。《天龙八部》里面有这么一段故事,灵鹫宫禁地有绝世武功,可是宫内弟子不能随便进去更加不能随便练——因为会走火入魔。看这些书你会很受挫很累很快就放弃的。

    三,我推荐两本书,就两本

    1,《算法导论》中文版,纸质正版。

    这本书对题目也难,而且也挺贵的,但是还是要买。为什么呢?

    最主要是仪式问题,买本厚重的书,会显得正式一点,心情会好一些,会更加有逼格,显得自己比较专业。所以要纸质正版。

    其次前三章,还是可以先看一下的,至少这本书目前来说不算完全浪费,还有有几十页可以用的。记住,看到第三章就好。

    2,《21天学通XXX系列》

    这突然让我想起一个段子:老夫看你骨骼精奇,并非凡人,将来必成大业,不如这样,我手上有本................................

    但是我是认真的。如果题主你不知道这些系列书么?比如说,我随手一搜就有这本,《21天学通ASP.NET(第2版)(附DVD-ROM光盘1张)》 顾宁燕, 等【摘要 书评 试读】图书

    就是那种最后几章是代码实操项目手把手教的那种书。这本如果楼主你要搞电子版的话,记得把源代码也搞下来,因为可能最后书会有印刷错误什么的打错字了什么的所以你要翻阅源码来编译尝试。如果题主你什么都没想法,这本也可以;并且,为了和下文配合,推荐http://ASP.NET的C#的。

    其次,语言和开发环境的问题

    我听说Python入门很容易,可是:

    1,我那个时候Python很小众所以我没有用那个入门,我对这个语言了解不多,具体情况不知道

    2,现在我经常会用Python写东西,可是不知道为什么我很不喜欢(个人倾向,我觉得Python和Scala有点娘),所以也一直没有认真系统研究学习过,我对这个语言了解不多,具体情况不知道

    3,Python这种脚本语言IDE支持的一直都不够好,出了问题Debug起来对题主难度太大啦!

    3,我当时入门在联创,联创的官方指定入门语言是C#

    所以我推荐用C# + Visual Studio.

    为什么C#呢?诚然,C#在其擅长的问题场景中,不算热门的语言(TIOBE Software: The Coding Standards Company), C++,JAVA,OC都比他流行,但是不得不说,C#是一种非常适合入门,适合理解概念的语言。比如说,它的面向对象就比JAVA完整,而且它是强类型语言还有软爹大力支持的Visual Studio来做IDE进行辅助,开发的时候比较顺心。OC需要MAC,这个太贵啦。C++就太难啦,我现在一般都在写JAVA和C++——我以前也觉得世界上没有难的语言只有不好的程序员;后来我的脸都被C++打肿啦。

    你以后可能会用各种其他语言的,可是现在就先C#吧。

    IDE我是支持要用的,详见这里:依靠 IDE 会让程序员的水平变差吗? - 知乎用户的回答。用什么呢?Visual Studio中文版。

    软爹官方有Visual Studio Express版,免费的,够用了。而且软爹装这个会把一大堆东西傻瓜式帮你装好,很方便的。就是可能以后如果你要卸载很难卸载,装得很深卸得很艰难。

    当然,我记得对于学生,软爹有个什么计划,可以用edu邮箱账号去获取免费的Visual Studio Ultimate版,如果你觉得用Ultimate版会开心一点,就去用;我就觉得用Utilmate虽然用不到NB功能可是我心情就是好。

    因为Visual Studio真是我见过最NB的IDE,配合《21天XXX》系列,简直是初学者利器——那些书甚至就会直接截图来手把手教,图自然就是Visual Studio。

    记得装中文版:莫装逼,装逼遭雷劈。你以后会改装英文版的,可是现在还不行。

    然后,成长路径的问题

    骐骥一跃,不能十步;驽马十驾,功在不舍 --- 《荀子·劝学篇》

    接触一个新领域或者初学,很容易受挫的,很容易放弃的。可怎么说呢,一个行业,比如说科研,我导师说过:勤奋可以让你变成good scientist,但是你如果想成为brilliant,你还需要一点运气——你看跟天赋关系都不是很大;再比如说,我吧,天赋不好基础也差,我身边也很多这样的人,可是通过努力,大家都可以达到 good 这个级别。Good算是什么级别呢?比如说大概就是Google, Facebook, Twitter, LinkedIn这种公司随便去?比如说,在顶会发paper?比如说,写的代码开源之后全世界都在用很流行?

    但是请注意,我的意思不是说题目您努力半年一年就可以这样;我的意思是,你通过努力,eventually,Good级别是可以达到的,不需要考虑天赋的问题。以题主的情况,如果你大三,大四能够拿到BAT的offer,我就觉得真的很棒很棒很厉害了啊!比如说你看我举例我的朋友,我就觉得他真的很厉害很厉害的啊,我就会夸他。题主所以你也加油哈哈哈!我以后也来夸你!

    所以千万不要随便放弃呢,要坚持要执着,当然,人是很脆弱的,不能说我凭借我勇敢的心就丝毫不虚了:我们需要做很多可以不停给我们成就感的事情,来让自己觉得”哎唷 不错噢“!这也是为什么我不推荐你看英文书不推荐你看硬书,推荐你看《21天XXXX》系列书。

    一开始,你要写一些程序,比如说"Hello World!",比如说”A+B“,写个几天,感受一下程序编译通过跑起来的快感。

    然后,第一个写的小项目,我推荐是用C#自己写一个WindowsXP带的计算器(Windows7的计算器吊炸天,不要写,那是自寻死路),具体怎么做呢?Google一下”C# windows 计算器“,把相关材料学习一下,然后给自己一个时间线,两周,就两周,去写完(包括学习必须的C#, Visual Studio知识)。找教程的时候,越清晰越细节越好,题主切记你的目的是入门,你基础差你不要害怕那些已经写了很久有一定修为的人的嘲笑——他们耗过的时间付出过的,他们就是应该比你强,这没有什么好羞耻的。

    等你做完的时候,你需要对你的计算器打分,看看你做的怎么样。联创团队有一份珍藏版的测试打分标准,如果你需要请向他们索要。要勇敢,少年。联创团队

    要怎么问呢?怎么联系呢?你应该自己去勇敢地去问,如果他们不给得话,你就自己再想办法——很多事情你需要自己去解决。

    记得,写计算器的时候要写一个”关于“的界面——你在里面可以写很多煽情的话,然后你这个计算器可以给自己用,或者送给别人(比如说妹子)用,比如我有朋友,就会写游戏然后给编了一个美丽的故事,最后给妹子说:这是世界上最独一无二的游戏,送给最独一无二的你,你看”关于“,那里有我所有的心意。

    少年,要记得学会自high,自己给自己找成就感啊。写了东西要用起来啊。

    再然后,你可以学一些算法。看看算法导论前三章,然后学学排序算法,搜索算法。排序算法有很多,把O(n^2)都学了,O(nlogn)的quicksort, mergesort学了(这时候你可以看看算法导论第四章),然后桶拍序也学一下。这时候《算法导论》这本书优势就出来了,它像一本字典,对于你现阶段要学的算法,在上面都可以查得到。

    少年不要怕算法难,我当时quicksort写了1周还是错了,搜索算法写了1周还是没写出来。但是这都没关系,我后来算法水平也还行,怎么说呢,登峰造极是肯定没有的,但是TopCoder稳个红名也是可以的(就是工作之后太久没练水平就江河日下了)。

    然后你写一下quicksort,一周。

    写一下全排列 和 全 组合,一周。

    写完去找些在线平台测一下,测不过就改,好好想想。

    再再然后,你就可以认真学习《21XXX系列》的那本书了,前面的内容你就看着看着,看不懂就想一下,想一段时间想不懂就跳过吧,没关系的,书是你的,一辈子这么长现在不懂以后需要再重来也是可以的,不需要一蹴而就嘛。然后,很重要的了,把最后的手把手教项目选至少一个,认真学习自己做一个。

    一个月吧。

    之后,相信你已经有一定的代码感了,你就可以出去跟大家交流扯淡了。记住,这时候的你很弱的,不要坐井观天自以为是。我一直以为,这个世界总会有比我强的人,总有我做不到的事情,总有我到不了的地方。

    有了代码感之后,就可以开始良性循环阶段了。这时候你可以:

    1,如果是就业导向的话,刷下POJ啊,看下那些关于面试题的书,学习里面的算法题吧。

    2,如果是提高工程能力导向的话,那就找小伙伴一起做些好玩的东西,实现一些IDEA,我听说联创每年都会有hackday,去把一些好玩的IDEA做成小项目,你可以去咨询一下,问问有没有什么好玩的IDEA啊。当然,最好的话是找个本校的这样方便嘛,一个人的力量很有限,跟别人一起搞既可以一起玩又可以一起交流不寂寞互相支持帮助。

    3,如果是科研导向的话。。。啊那我之前说的东西好像都不是很适合你,我也以为你问题不会是这个导向。

    再这样继续一段时间,你就迈过了初学者阶段了,你开始入门了你就可以重新思考更多的问题了。那时候需要怎样呢?未来的事,未来再说罢!

    --------------------------------

    很多人在下面评论了,我有空的话会尽量回复,大家互相交流分享嘛,我懂的也没多少;可是我也不能保证都回复,所以请见谅。

    相关文章

      网友评论

        本文标题:程序之路

        本文链接:https://www.haomeiwen.com/subject/ybrbxttx.html