Browsed by
Category: 文章转载

[转]程序员的十层楼

[转]程序员的十层楼

第1层 菜鸟 第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解 计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者 JavaScript,…,均可入门迈进这层。 在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通 信、自动化、数学等相关专业的人士进入这一行,此外还有众多的其他专业转行的人士,人 数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。 没有多少人愿意一辈子做菜鸟,因为做”菜鸟”的滋味实在是不咋的,整天被老大们吆喝 着去装装机器,搭建一下测试环境,或者对照着别人写好的测试用例做一些黑盒测试,好一 点的可以被安排去写一点测试代码。当然如果运气”好”的话,碰到了国内的一些作坊式的公 司,也有机会去写一些正式的代码。 所以,菜鸟们总是在努力学习,希望爬更高的一层楼去。 第2层 大虾 从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语 言,掌握C标准库和常用的各种数据结构算法,掌握STL的基本实现和使用方法,掌握多 线程编程基础知识,掌握一种开发环境,再对各种操作系统的API都去使用一下,搞网络 编程的当然对socket编程要好好掌握一下,然后再学习一些面向对象的设计知识和设计模 式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都 可以爬到第2层,晋升为”大虾”。 中国的”大虾”数量和”菜鸟”数量估计不会少多少,所以这层上仍然远领先于西方。 大虾们通常还是有些自知之明,知道自己只能实现一些简单的功能,做不了大的东西, 有时候还会遇到一些疑难问题给卡住,所以他们对那些大牛级的人物通常是非常崇拜的,国 外的如Robert C. Martin、Linus Torvalds,国内的如求伯君、王志东等通常是他们崇拜的对 象。其中的有些人希望有一天也能达到这些大牛级人物的水平,所以他们继续往楼上爬去。 第3层 牛人 由于”大虾”们经常被一些疑难问题给卡住,所以有了”大虾”们只好继续学习,他们需要 将原来所学的知识进一步熟练掌握,比如以熟练掌握C++编程语言为例,除了学一些基础性 的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外, 更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存管 理、进程和线程的管理机制,了解处理器的基础知识和代码优化的方法,此外还需要更深入 地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对 各种设计方法有更好的理解等。 学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数 据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来说,光懂结构化设计、 面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设 计、面向使用的设计、面向数据结构算法的设计、情感化设计等,否则是很难进到这个楼层 的。 当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们, 现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种专业论坛里泡一泡,把 这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如 Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下,菜 鸟和大虾们会觉得你很”牛”,你也就爬到了第3层,晋升为”牛人”了。 看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是 不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你”牛” 呢? 需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。 当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只要循着他们的足迹前 进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接: http://www.threadingbuildingblocks.org/),然后上Intel的博客 (http://software.intel.com/zh-cn/blogs/)和多核论坛 (http://forum.csdn.net/Intel/IntelMulti-core/)去看看相关文章,再买上几本相关的书籍学习 一下。 在国内, 一旦成为”牛人”,通常可以到许多知名的公司里去,运气好者可以挂上一个 架构师的头衔,甚至挂上一个”首席架构师”或者”首席xx学家”的头衔也不足为奇。有不少 爬到这层的人就以为到了楼顶了,可以眼睛往天上看了,开始目空一切起来,以为自己什么 都可以做了,什么都懂了,经常在网络上乱砸板砖是这个群体的最好写照。由此也看出,国 内的牛人数量仍然众多,远多于西方的牛人数量,在这层上仍然是领先的。 也有不少谦虚的”牛人”,知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴 子上树一样,往下看是笑脸,往上看是屁股。为了多看笑脸,少看屁股,他们并没有在此停 步不前,而是继续寻找到更上一层的楼梯,以便继续往上爬。 第4层 大牛 从第3层爬到第4层可不像上面说过的那几层一样容易,要成为大牛的话,你必须要能 做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统,不 会写编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得象模 象样的话,那么你就从牛人升级为”大牛”了。 当然,由于各个专业领域的差别,这里举操作系统、编译器、TCP/IP协议只是作为例 子,并不代表成为”大牛”一定需要掌握这些知识,以时下热门的多核编程来说,如果你能比…

Read More Read More

[转]Emacs+ Latex 教程

[转]Emacs+ Latex 教程

Emacs + LaTeX 快速上手(原网址 http://cs2.swfc.edu.cn/~wx672/lecture_notes/linux/latex/latex_tutorial.html) 本教程完全针对本校D215机房Ubuntu系统中的Emacs和LaTeX配置。关于如何配置,请看这里。 本教程中涉及的LaTeX源文件和图片都可以在这里找到。 目录 1 Emacs + AucTeX,60分钟快速入门 为什么非要推荐LaTeX? 这完全是出于个人喜好。从1996年开始接触计算机到现在,Windows、UNIX、MS-Word、LaTeX 我都用过了。我觉得我该把我认为优秀的东西推荐给你。即使你不感兴趣,但做为计科专业的学生你应该知道它的存在。 为什么非要推荐Emacs? 这不仅是出于个人喜好,也不仅是因为Emacs是最优秀的编辑器,我最基本的目的是,希望每一个计科专业的学生能熟练使用键盘。 1.1 放松心情 LaTeX很强大,但对于初学者来说,你不必关心它有多强大,因为最为常用的命令和环境不过就是那么几个。而且你也不必手工输入这些命令,只要你用Emacs+AucTeX,几个简单的快捷键就足以满足你的基本需求了。对于格式复杂的需求,通常你只要套用模版就可以解决问题了。所以,大家只要把Emacs用熟,一切迎刃而解。 1.2 用LaTeX写文章就是在编程 我们先回忆一下用Emacs写一个 hello.c 的过程: 打开Emacs; 开始编辑一个新文件,名字叫 hello.c: C-x C-f 在Emacs窗口的最下面(也就是 mini buffer 里)写上新文件的名字 hello.c: hello.c C-j 向文件里写东西: #include <stdio.h> int main(int argc, char *argv[]) { printf (“Hello, world!n”); return 0; } 保存: C-x C-s 编译: gcc hello.c 运行: ./a.out 再来看一下用Emacs写一个 hello.tex 的过程: 打开Emacs; 开始编辑一个新文件,名字叫 hello.tex: C-x C-f 在Emacs窗口的最下面(也就是 mini buffer 里)写上新文件的名字 hello.tex: hello.tex C-j C-j 向文件里写东西: documentclass{article} begin{document} Hello, world! end{document} 保存: C-x C-s 编译: xelatex hello.tex 看结果: evince hello.pdf 怎么样? hello.c 和 hello.tex 的编辑过程没什么分别吧。只要把Emacs用熟练,不管写什么程序,都是这么个过程。你 不必学习VC去写C/C++, 不必学习eclipse去写Java, 不必学习MS-Word去写报告、幻灯片,…

Read More Read More

[转] 35 BEST PLACES TO LEARN HOW TO CODE QUICKLY

[转] 35 BEST PLACES TO LEARN HOW TO CODE QUICKLY

  WEB DEVELOMENT 35 BEST PLACES TO LEARN HOW TO CODE QUICKLY MARCH 7, 2014 ROGER   Everyone secretly yearns to be an entrepreneur and with the Tech startup industry and opportunities on a boom these days I see more Online start-up companies than real physical ones. As the name suggests a tech start-up means that your business if more often than not online. For such a venture one needs to understand coding and designing. I mean, how can you think of opening a barber shop without knowing how…

Read More Read More

[转]编程进阶

[转]编程进阶

ACM队不是为了一场比赛而存在的,为的是队员的整体提高。 大学期间,ACM队队员必须要学好的课程有:   l C/C++两种语言 l 高等数学 l 线性代数 l 数据结构 l 离散数学 l 数据库原理 l 操作系统原理 l 计算机组成原理 l 人工智能 l 编译原理 l 算法设计与分析   除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。   以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。   大一上学期:   必学: 1. C语言基础语法必须全部学会 a) 推荐“语言入门”分类20道题以上 b) 提前完成C语言课程设计   2. 简单数学题(推荐“数学”分类20道以上) 需要掌握以下基本算法: a) 欧几里德算法求最大公约数 b) 筛法求素数 c) 康托展开 d) 逆康托展开 e) 同余定理 f) 次方求模   3. 计算几何初步 a) 三角形面积 b) 三点顺序 4. 学会简单计算程序的时间复杂度与空间复杂度 5. 二分查找法 6. 简单的排序算法 a) 冒泡排序法 b) 插入排序法 7. 贪心算法经典题目   8. 高等数学   以下为选修:   9. 学会使用简单的DOS命令(较重要) a) color/dir/copy/shutdown/mkdir(md)/rmdir(rd)/attrib/cd/ b) 知道什么是绝对路径与相对路径 c) 学会使用C语言调用DOS命令 d) 学会在命令提示符下调用你自己用C语言编写的程序,并使用命令行参数给自己的程序传参(比如自己制作一个copyfile.exe实现与copy命令基本功能一致的功能) e) 学会编写bat批处理文件 10. 学会Windows系统的一些小知识,如设置隐藏文件,autoRun.inf的设置等。 11. 学会编辑注册表(包括使用注册表编辑器regedit和使用DOS命令编辑注册表) 12. 学会使用组策略管理器管理(gpedit.msc)组策略。   大一下学期: 1. 掌握C++部分语法,如引用类型,函数重载等,基本明白什么是类。 2. 学会BFS与DFS a) 迷宫求解(最少步数) b) 水池数目(NYOJ27) c) 图像有用区域(NYOJ92) d) 树的前序中序后序遍历 3. 动态规划(15题以上),要学会使用循环的方法写动态规划,同时也要学会使用记忆化搜索的方法。 a) 最大子串和 b) 最长公共子序列 c) 最长单调递增子序列(O(n)与O(n log n)算法都需要掌握) d) 01背包 e) RMQ算法 4. 学会分析与计算复杂程序的时间复杂度 5. 学会使用栈与队列等线性存储结构 6. 学会分治策略 7. 排序算法 a) 归并排序 b) 快速排序 c) 计数排序 8. 数论…

Read More Read More