一大群啊,傻B中的战斗B

一大群啊,傻B中的战斗B

这个部分大概需要一段时间吧,打好基础是挺重要的,熟话说厚积薄发,大家都明白这个道理,明白学习算法,学习计算机理论的重要性,但是真要实践起来实在是痛苦的事情,每天的学习觉得很盲目有很多东西都是用不上的,所以说练习内功是一件漫长而又艰险的路途。可是要知道要想达到真正的境界,这是不可少的一步,曾经看过GNU的掌门人,动辄10年以上一线开发经验,8年的开发team管理经验,这是什么境界!在中国呢,大多数2B的所谓的项目经理,技术经理都是一群2B玩意儿,没有坚厚的理论功底,前几年玩过什么VB,Delphi就说能开发了,这几年写过一阵子Java,就说掌握OO了,真是疯子,没有学术气氛的一个大环境,只有自己努力了。我的一位很厉害的师傅给我讲过老外为什么比现在的国人要厉害,那是因为他们能“管理”的代码比较多,什么意思呢?就是说我的大脑里面能控制5K行的代码,比我厉害的老外能控制1W行的复杂度,而且在我的理解老外学习计算机的方式和我们也有很大不同,他们能把问题看的很透彻,甚至看穿了每个变量在内存中的每一个行为,中国的互联网很大程度上影响了国人的学习态度,有的计算机毕业的学生一直去写一些烂代码,美其名曰设计师,完全丢掉了计算机老祖宗的教导,我觉得要是自己觉得自己是计算机系出来的那么要掌握很多东西后才能说自己是一位软件工程师,否则连coder都不是,现在很多公司招人其实都是招coding的人,不是软件工程师。四年至少学会和理解计算机和数学的大部分课程,为什么要学习一定的数学呢?这是个受争议的问题,而我个人认为真正的软件工程师是需要数学的,起码要数学的思维方式。
一门或者几门语言是必须学会的,要不我们怎么实践呢。过程的C和OO的Java最好都要会,有C经验是很重要的,十分重要,我之前C的经验很少,所以被拒过一次,因此现在想静下心来学习学习,实践实践。
语言会了就是练内功的基本了:算法和数据结构,这是两个不同的东西,我曾经去面一家公司,所有的大题都是链表,当时狂晕!爆汗!只会考数据结构,连个查找都不考,呵呵,自然都很简单的搞定了。书多的是,我不推荐看TAOCP,除非你的数学有了5年以上的数学奥林匹克训练,并且数学知识面非常广泛,没看过的人以为很神奇,要是看完了很牛B,我当时也是这样想的,看看书皮上写的,看会了就能给盖茨发简历了,真牛!不过看了不到半年,仅仅半年,我就明白了一个伟大的事情:我被打击哭了!!不过第一卷我还是看完了,掌握的根本不到50%,我有11年的数学奥赛训练史,所以勉强读完第一卷所谓的基本算法,感觉就是数学课本,杂七杂八的数学课本,各方面都有,高等数学,代数学,概率,级数都涵盖了。后来明白了,需要看看他的基础具体数学,然后学一下组合数学才能驾驭这本东东。
后来明白了,我需要一定的C的基础和牛B的C++ coding能力才能去搞搞一些我喜欢的地方,呵呵。因此该学习一下了,学好了C,在练练Algorithms In C的代码能力,然后看看Algorithms Desgin,提高一下思维,最后才可以去看半数值了。

所谓“厚积薄发”,实在是有道理!

附上一下:我觉得要想去一些牛B的地方应该复习一下以前学会的东西:
计算机理论基础:离散数学,计算理论,数值计算,自动机理论,计算机系统,操作系统,数据库理论……
数学知识基础:统计学,概率论,随机过程,组合数学,高等数学,数学分析……
研究方向上基础:数据挖掘算法,机器学习算法,数学建模的东东……
语言上:C,Java,可以了。C++可是很难学的,唉……。

最后就是,aha,智力题了!

这是一个哥哥的建议:
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功。
主要是考虑考虑算法,关键是思考算法上,不是花在写程序与debug上。
练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来.
 1.最短路(Floyd、Dijstra,BellmanFord)
 2.最小生成树(先写个prim,kruscal要用并查集,不好写)
 3.大数(高精度)加减乘除
 4.二分查找. (代码可在五行以内)
 5.叉乘、判线段相交、然后写个凸包.
 6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
 7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
 8. 调用系统的qsort, 技巧很多,慢慢掌握.
 9. 任意进制间的转换

练习复杂一点,但也较常用的算法。
如:
 1. 二分图匹配(匈牙利),最小路径覆盖。
 2. 网络流,最小费用流。
 3. 线段树。
 4. 并查集。
 5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp。
 6.博弈类算法。博弈树,二进制法等。
 7.最大团,最大独立集。
 8.判断点在多边形内。
 9. 差分约束系统。
10. 双向广度搜索、A*算法,最小耗散优先。

前两个阶段是打基础,第三阶段是锻炼快速建立模型、想新算法。这就要平时积累了。
 1. 论文看看,关于研究方向的主要看(大概几百篇的,我只看了一点点,呵呵)。
 2. 做过的题要记好 :-)。
 3. 主动去看看这个方向上比较牛的人的研究方法和研究历史。

引用一句广告词:“你有一个想法,一个很大的想法,这个想法如此之大!”。将理想变为现实的过程总是十分漫长而又艰辛的。——IBM

你可能感兴趣的:(一大群啊,傻B中的战斗B)