程序员四大忌 你该如何避免呢
一忌:轻易言败,没有自信
没有永不放弃精神的程序员,只是一个有程序员名号的假程序员。一个真正的程序员,知道在程序设计的过程中,可能会遇到不计其数的困难和问题,可能有极多的挫折和失败,而成功只有一次。
就为解决一个问题,我们可能连续十几甚至几十小时的坐在计算机前不停的工作。一个问题解决了,可能又有其它的问题出现。而你要是不能坚持下来,可能从前的一切努力都流失了。轻易言败的人请不要做程序员,你不可能成功。执着是最可贵的。
执着的程序员都是相信自己的人,每时每刻都会鼓励自己,你做的出来,你能解决,你会成功。这样他才能坚持下去。
二忌:浮华不实,自满自大
夸夸奇谈的人不是优秀的程序员。整个程序设计的过程就是一个研究学习,应用,再研究学习,再应用的过程。一名优秀的程序员决不会认为自己足够好了,不需要再提高了。自满自足的人不会是好程序员,会很快落后以致落伍。所以越是优秀的程序员越是感觉自己懂得少,不会在人前故意卖弄,这并不是故作谦虚,而是实实在在的感受,亲自体会才能明白。
浮华的程序员会不懂装懂,不停的强调语言的优劣,平台的好坏。追求所谓最新最时尚的技术,停留在表面问题上。或假做深沉,用不适合的方式做不适合的事情。就像孔已己一样,以为知道\茴\字有四种写法就是学问。最后是简单的作不好,困难的也作不好。
三忌:死气沉沉,不求甚解
优秀的程序员是充满激情和活力的程序员。求知欲和创造欲是原动力。有求知欲你才能不停的学习,有创造欲你才能不停的超越自己。死气沉沉的程序员已经对程序设计失去了兴趣,很快就会主动或被迫离开。
创造不是指你要发明什么别人不知道的技术或方法,而是说不能仅仅知道怎么做,还要知道为什么这样做。之后你才能创造,其实程序设计的整个过程就是创造的过程。
四忌:强调客观,忽略自身
很多程序员都是在失败的时候强调客观因素,而优秀的程序员的程序员都是先反省自己。要明白自己缺陷,再努力去学习。没有人事事都做的成功,也没有人生来就什么会做。所以失败了,多想想自身的原因,这样你才会不停的进步,而不是留在原地抱怨。
一位高手的建议:
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.
训练过ACM等程序设计竞赛的人在算法上有较大的优势,这就说明当你编程能力提高之后,主要时间是花在思考算法上,不是花在写程序与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. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来
做:-P )
3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力. 4. 一道题不要过了就算,问一下人,有更好的算法也打一下。 5. 做过的题要记好 :-)
下面转自:http://hi.http://m.njliaohua.com//wilworld/blog/item/88b1b844d37e4049500ffe6a.html
算法书有很多可以参考:
1、Concrete Mathematics --- A Foundation For Computer Science Ronald L. Graham , Donald E. Knuth , Oren Patashnik
这本书《具体数学》是Stanford计算机系的教材(1970 年开始给研究生授课),书的内容是Knuth的巨著TAOCP第一章的扩展,涉及了计算机科学领域内几乎所有可能遇到的数学知识。书中许多经典问题的解答比目前广泛流传的解法更易懂。对于提高大家的数学修养有很大帮助。
2、Introduction to Algorithms
Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein
《算法导论》MIT计算机系的经典算法教材。作者Rivest获得过ACM Turing Award,牛!本书内容全面,语言通俗,很适合大家入门。
3、实用算法的分析和程序设计 吴文虎 王建德
大名鼎鼎的“黑书”。内容包括了竞赛需要的各种算法,各种层次的读者都适合。
【这里是我自己加的:其实所谓\黑书\还有一本,《算法艺术与信息学竞赛》作者:刘汝佳 黄亮,很经典,很流行】 4、网络算法与复杂性理论 谢政 李建平
内容很丰富的图论教材
5、算法+数据结构=程序 N.Wirth
Pascal语言的发明人Wirth教授的名著,深入阐述了算法与数据结构的关系,对每个算法都提供详细的Pascal源程序,适合各种水平的读者。
最后,在学习算法提升战斗力的同时,也要多做题目,实战是很有必要的。其实并不是所有的题目都是靠算法的,有一些题目是有多种可以优化的手段,也有一些工程性比较强的题目。上手做和把题做精还是有很大区别的(惭愧的说,我就是属于上手做,没有做精,所以??)。
愿每一位程序设计竞赛爱好者挑战极限!
ACMer必备知识(任重而道远......) 图论
路径问题
0/1边权最短路径 BFS
非负边权最短路径(Dijkstra)
可以用Dijkstra解决问题的特征 负边权最短路径 Bellman-Ford
Bellman-Ford的Yen-氏优化 差分约束系统 Floyd
广义路径问题 传递闭包
极小极大距离 / 极大极小距离 Euler Path / Tour 圈套圈算法
混合图的 Euler Path / Tour Hamilton Path / Tour
特殊图的Hamilton Path / Tour 构造
生成树问题 最小生成树 第k小生成树 最优比率生成树 0/1分数规划 度限制生成树
连通性问题
强大的DFS算法 无向图连通性 割点 割边
二连通分支 有向图连通性 强连通分支 2-SAT 最小点基
有向无环图 拓扑排序
有向无环图与动态规划的关系
二分图匹配问题
一般图问题与二分图问题的转换思路 最大匹配
有向图的最小路径覆盖 0 / 1矩阵的最小覆盖 完备匹配 最优匹配 稳定婚姻
网络流问题
网络流模型的简单特征和与线性规划的关系 最大流最小割定理 最大流问题
有上下界的最大流问题 循环流
最小费用最大流 / 最大费用最大流
弦图的性质和判定
组合数学
解决组合数学问题时常用的思想 逼近
递推 / 动态规划 概率问题
Polya定理
计算几何 / 解析几何
计算几何的核心:叉积 / 面积 解析几何的主力:复数
基本形 点
直线,线段 多边形
凸多边形 / 凸包
凸包算法的引进,卷包裹法