IT人士入门指南(2012-02-09更新)

##选择

  除了IT行业,你可以选择的更多。

  我知道,在经历了天朝12年的应试教育以后。来大学第一天的感觉就是”我自由了“。这是一个最好的感觉,也是一个最坏的感觉。好是,你确实可以自己决定很多事情了,坏是,你确定你做出一些比较有利的决定么。上大学以后你确实知道你想要什么么。如果我这样问你,你能回答么。天朝的具体制度不去评论。我们以生物最基本的要求来要求自己,就是生存下去。是不是你说你都活了二十左右年了。难道不是生存么。我想说的是依靠自己的生存,有爸是双江,也蛮好的阿。是官二代,富二代。那我觉得,你的生存问题也不大。做一个好人就好了。大多数师弟师妹,你们应该好好考虑一下4年以后,你能怎么活下去.

过于明确的功利性选择向为有识之士所不齿,但是,如果当一个刚刚走出校门,面对残酷的商业竞争而举足失措的少年,或者是对于一个几乎耗尽了他的家庭生存成本终于读完了大本,却在就业市场上徒劳往返,不断奔波碰壁,甚至连最基本的生存都已难以保证的失败者,我们再义正辞严的宣讲什么 “君子谋道不谋食”,再讲什么“君子喻于义”,再讲什么“一箪食,一瓢饮,在陋巷。人不堪其忧,回也不改其乐”,这虽然省心省力,而且占据了道德的制高点,却未免有点不厚道。

  做IT很辛苦。加班就是必备技能。所以,我说除了软件学院,你可以有很多的选择。也许你听说IT高工资,但是我说,高工资全部在一线大公司,一线大公司,全部在一线城市。一线城市的幸福感真的很低。你那高工资跟那房价一比,跟工作压力一比。觉得真的一般。而如果你回家,考了公务员或者银行或者垄断国企,我觉得你生活质量和幸福感会很好。所以,人各有志,最好自己客观的评价一下自己,适合做什么事情。想过什么样的生活。好有一个全局的打算。将来是可以公务员可以事业单位可以国企可以垄断行业。所以,除了IT有很多选择。

  综上所述,我只想说,除了搞IT,你还有很多的选择,让自己的人生更加的美好。说了怎么多。你最后还是决定留下来从事IT这个行当的话。你可以继续接着看了。

  做为一个软件开发人员,或者说做为一个IT行当的新手。我在下面三个选择中不断徘徊,不断挣扎。就为了这三个问题,耽误了很多学习的时间。所以,我有必要将我在这三个问题获得的经验分享一下。(PS:就算你不是电脑专业的也可以有些收获)

第一个选择——电脑

第一个选择和第二个选择密切相关:你需要一台什么样的电脑和你需要用什么样的操作系统。
你如果对这个问题觉得很奇怪了,或者说你要说你觉得电脑只有价钱的区分,操作系统只有windows xp 到 windows vista 到 windows 7。那我建议你多了解一下外面的世界。这情况是微软的成功,中国软件的悲哀。
扯远了,拉回来。我们为什么要选择电脑(品牌)。作为一个开发人员,我首先推荐ThinkPad。理由只有一个,专业。
  作为一个企业或者一个开发人员来说,稳定是最重要的。根据我的观察和使用情况。即使Thinkpad已经被联想收购了,但是依然是最好的laptop没有之一。这个不解释。

  另外一个选择,Mac。具体详细

  再次不解释。

  PS:不解释是因为有共鸣者不用解释,不了解者应该会自己Google一下。

彪悍的人生不需要解释。
               ——老罗

  所以,如果你在纠结于买一个什么样子的电脑,果断Thinkpad or macbook 。也许你说预算不够买thinkpad或者是macbook。那我就觉得,你可以入一个thinkpad二手。3000左右的,性能足够满足你所有学习上的需求。不过记住,thinkpad我只推荐T系列和X系列。其他的看都没有看过。

第二个选择——选择什么样的操作系统。Windows or Linux or Unix or MacOS。

  记得我最牛x的一个老师(伯克利数学博士)跟我说过,如果你选择windows你就站在整个硅谷的对面。呵呵,我对此深信不疑。首先,我很尊重微软。他是一个伟大的公司,为我们提供了无数伟大的技术。可是,我不喜欢。我更喜欢Linux这样自由免费的系统。

具体理由详见

呵呵,如果你能坚持看完,那你就应该知道我的推荐了:Linux or Unix or MacOS 没有Windows

第三,选择什么样的编程语言。

  曾经,我苦苦纠缠于要学习什么语言,以至于什么都没有学的很精通。今天站在这个语言阵营,明天为那个语言阵营呐喊。结果三年以后的今天,我回过头去看。才发现,用什么语言都不重要,重要的是设计。不同的语言在不同的领域有不同的优点。只要能理解问题,设计出解决问题的方案。在找合适的语言来做就好了。前两天看见贺神转载的文章,上面有一句话很认同。手里如果有一把锤子,所有的问题都只有用钉钉子来解决。手里的工具是什么,就是你会什么语言。(这里大部分是转载了之前自己写的一篇blog,说这个有点早了,下面要开始说怎么学习了)

##基本存活技能

  先泛泛谈一下,在今天这个知识爆炸的时代。我们不可能学会所有东西。因此,只要有活到老学到老的决心就好。学海无涯。。。。。。。(每次有这种想法,就想起高爷爷(Donald Ervin Knuth)用一辈子写一部书,而天朝很难有人做技术到10年。浮躁的天朝)
  IT里面也分为很多方向,而不是仅仅学院里面开设的那四个。而且发现,其实后来找工作时候,用到的知识,都是自己学的。就是说,学院与业界还是存在一定的脱轨。这个无能为力。当初对自己的定位也很模糊,学的很杂,走了很多不必要的弯路,所以今天把我的一些糟粕去掉,说一些精华的东西。因为我信仰开源自由的精神,也才来分享自己的想法。

第一个技能

提问的智慧

这个很重要,是学习的基本,是向人请教的规范。虽然只是一篇文章,但是我却说他是一项技能,值得你初期每次提问的时候,看一看。

第二个技能学会使用搜索引擎。

  简单的说,就是你要学会Google,也许你觉得没什么学的。所以,现在你可以google一下google怎么用的问题

  这两个是基础,就想九九乘法表一样,应该时刻谨记。

第三个技能学会使用编辑器

  选择一个文本编译器: Vim or Emacs

你现在选什么我也不知道,如果你不喜欢折腾就选Vim。如果,你觉得要变成一个手指的魔术师而且禁得住折腾的话就选择Emacs。但是必须深入的学习一个。
关于他们

Vim资料1
Vim资料2

Emacs资料1
Emacs资料2

能把所有连接都看完。坚持到现在,不错不错。我觉得你已经有超越我的迹象了。
  在一开始,我说过,我们学IT其实不管喜欢不喜欢,最后的结果是我们能依靠它去生存下去。所以现在我们来选择我们要学习的方向,贪多不烂。深入一个方向比浅尝辄止好。(不断自省)还有一个问题就是IT这个行业每时每刻都有新的技术出来。有时候,你看见了,听说了。或许很眼红。觉得自己应该可以学学。已我的经验来看,这样做往往学不到东西。只说一个理由,就是新技术可能门槛很高。要学好它下面的基础要牢靠。也许一页字的东西。其实涉及了方方面面。你要看懂。要学习N多基础的东西。所以用2年学下面我说的东西吧。

第四个技能Git

起初,我以为Git和Svn是一个货色。后来,才知道我的这种想法是多么的离谱。差点连最nb的版本管理错过。因为Git和github的出现。世界上多了多少有激情的项目。改变了现在的IT世界。

Git入门

Git进阶

github入门

##头两年学习路线

第一,Vim or Emacs。(一辈子^_^)

第二,英语。

第三,数学:

什么是数学

具体数学

第四,C语言

C程序设计语言(3个月-4个月)

Linux C编程一站式学习 (这本有电子版的,自己google。 2个月)

深入理解计算机系统(6个月)

数据结构与算法分析(3个月)

算法导论(一年)

这些书,我建议你一本一本买,然后一本看完了再进入下一本。
综上所述,我觉得起码要学两年。如果你天赋异禀。几个月就搞定了。那我觉得你应该,也知道怎么向后面学习了。跟着感觉走就好了。

初级技能

两年以后,我觉得你可以选择方向了,由于才粗学浅。很多方向我都只能给一个大概。

其实现在是一个Web的时代,我写的之前的两年学习其实都是脱离Web的。也就是说学习是脱离了这个时代。我检讨一下。因为我是这样过来的,也只能给出这样的学习路线。可是我在不断学习哦。所以我也不断的更新这个文章。

桌面应用方向

不管是Windows还是Linux或者是Mac,传统意义上的编写程序其实就是编写桌面应用。什么是桌面应用,就是想QQ,WPS这样叫做应用程序的东西。这些软件存活在电脑里面。发展了很久,所以再今天看来他们有些老了。跟不上这个Web时代的步伐了。可是不代表他们不赚钱。今天有很多业务系统依旧守着桌面应用。所以,如果你没有一个相当强大的idea和实力。你很可能就去做业务系统了。小团体或个人很少做商业的桌面应用了。

在天朝内,从需求上来说windows的桌面需求是最多的。
传说一本Windows核心编程看熟10k左右的工作应该没有问题。需要学C++,Windows底下的汇编。学Windows核心编程。学Windows驱动。然后,你可能要写界面。你要学MFC or WPF。

Linux桌面就比较纠结了,国内我就没有看到拿它赚钱的。Linux程序设计是必要的。然后是Gtk+ or Qt选一个图形库就ok。

Mac的桌面需求在天朝,要这个的公司。太少太少了。不过待遇都很不错10k+。

信息安全方向

再今天这个Web时代,我们的在线安全越来越重要。所以做安全产品活的一般都好一些。Windows上就逆向、破解。*nux上就服务器的配置、防御什么的。

Web后台方向

建站用的做多的PHP,框架也最多。不过据说存在各种各样的问题。

国内最大的java web应用是淘宝。你应该学S2SH, EJB,Maven。

豆瓣是国内最大的Python web应用。而且Python后台招聘的比PHP的一般要搞1-2k。Python的web框架也是一抓一大把。不过见过招聘最多的是django

Ruby on Rails这个号称要拯救世界的ror。国外最近冒出比较有创意的web应用都用的ror。国内目前比较少。工资跟python差不多。但是学习门槛比较高。

Web前端方向

工资高。福利好。工作压力小。说的就是这个阿。大概是html css javascript。然后是flash吧。现在flash做游戏的很多。2011年html5火的一塌糊涂。javascript本来被一直诟病的情况下,因为Chrome的V8引擎横空出世进而也再2011年用node.js重新要号称拯救世界。好的前端应该可以拿到同期最高的工资。目前强烈推荐做前端,门槛低,学习周期相对较短。容易高工资。

移动Web方向

IOS

iphone app很火。起工资也很高。如果你当初买了Macbook。强烈推荐你走这个路。能google到很多学习路线。大概就是objective-c 然后cocoa。斯坦福有个老头讲课很不错。

android

火的一踏糊涂,今年我同学去了很多oppo。大概是Java->Android。前两天看到因为效率的问题,Android支持原生C++的ndk在不断更新中。

其他

meego 挂了。 用的Qt

WebOS 挂了。 用的Javascript。

塞班 挂了。 用的Qt

MTK 几近灭绝。 用的J2ME。

游戏方向

游戏不太懂,应该是要学数学和物理。然后是一个引擎。微软有XNA。还有一些开源的引擎。

希望,这些能帮助到一些要入IT,缺不知道门路的人们。