【转】程序员技术练级攻略(1)-启蒙和进阶
[个人觉得还不错的学习经验,当然这个“不错”并不是我实践过,而是看上去比较合理,系统;转来给大伙儿看看]导读:本文是由陈皓和他的一位朋友Mailper合作完成,原名叫《Build Your Programming Technical Skills》,本文分享了Mailper和作者个人的学习经历。每个程序员都希望自己能顺利的升级到高的层次,您不妨按照下面的方法去做。前言你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)建议:不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。启蒙入门1.学习一门脚本语言,例如Python/Ruby可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:处理文本文件,或者csv(关键词 python csv, python open, python sys)读一个本地文件,逐行处理(例如word count,或者处理log)遍历本地文件系统(sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果跟数据库打交道(python sqlite),写一个小脚本统计数据库里条目数量学会用各种print之类简单粗暴的方式进行调试学会用Google (phrase, domain, use reader to follow tech blogs)为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。2.用熟一种程序员的编辑器(不是IDE)和一些基本工具Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。Source Insight (或 ctag)使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。3.熟悉Unix/Linux Shell和常见的命令行如果你用windows,至少学会用虚拟机里的linux,vmware player是免费的,装个Ubuntu吧一定要少用少用图形界面。学会使用man来查看帮助文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …学会使用一些文本操作命令 sed/awk/grep/tail/less/more …学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息了解正则表达式,使用正则表达式来查找文件。对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。4.学习Web基础(HTML/CSS/JS)+服务器端技术(LAMP)未来必然是Web的世界,学习Web基础的最佳网站是W3School。学习HTML基本语法学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)学会用 Firefox + Firebug或Chrome查看你觉得很炫的网页结构,并动态修改。学习使用Javascript操纵HTML元件。理解DOM和动态网页(http://oreilly.com/catalog/9780596527402)网上有免费的章节,足够用了。或参看DOM。学会用 Firefox + Firebug或Chrome调试Javascript代码(设置断点,查看变量,性能,控制台等)在一台机器上配置Apache或Nginx学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。把PHP连接本地或者远程数据库MySQL(MySQL和SQL现学现用够了)跟完一个名校的网络编程课程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php )不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上学习一个Javascript库(例如jQuery或ExtJS)+ Ajax(异步读入一个服务器端图片或者数据库内容)+JSON数据格式。HTTP: The Definite Guide读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)买个域名,租个空间,做个自己的网站。进阶加深1.C语言和操作系统调用重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。学习(麻省理工免费课程)计算机科学和编程导论学习(麻省理工免费课程)C语言内存管理学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)IPC和Socket的东西可以放到高级中来实践。学习Windows SDK编程(Windows 程序设计,)写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows图形界面的编程。2.学习JavaJava的学习主要是看经典的Core Java 《Java 核心技术编程》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)学习JDK,学会查阅Java API Doc http://download.oracle.com/javase/6/docs/api/了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。学会使用IDE Eclipse,使用Eclipse编译,调试和开发Java程序。建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。3.Web的安全与架构学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章)学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM)学习Web的静态页面缓存技术。学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。实践任务:使用HTML5的canvas制作一些Web动画。尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM +静态页面缓存的网站。4.一些开发工具学会使用SVN或Git来管理程序版本。学会使用JUnit来对Java进行单元测试。学习C语言和Java语言的 coding standard或coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。推荐阅读《代码大全》《重构》《代码整洁之道》本帖最后由 大傻 于 2011-10-25 16:40 编辑
;P又是不靠谱的文章。。。。;P
启蒙入门
1.学习一门脚本语言?
值得商榷难道说启蒙非要学习一门脚本语言??天朝教育坑害人不浅
2熟悉Unix/Linux Shell和常见的命令行
这也未必都需要学习
3进阶加深
C语言和操作系统调用:重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构
c语言也未必是进阶!再者学完经典的算法和数据结构如何去用?这些东西恐怕211大学计算机应该都有学过吧?
以下不一一例举了,话虽好,但是一点逻辑性都没有没有针对性,何谈进阶?
要是说推荐书籍么这道还算是个好点的帖子......
说了一堆,这些东西学稍微懂了一条中的部分年薪少说也得20w。。很多东西谈得都太浮夸了!!!!! 大傻 发表于 2011-10-25 16:39 static/image/common/back.gif
又是不靠谱的文章。。。。
启蒙入门
呵呵,举世皆渚你独醒? 本帖最后由 大傻 于 2011-10-25 16:53 编辑
tsembrace 发表于 2011-10-25 16:49 static/image/common/back.gif
呵呵,举世皆渚你独醒?
;P看不惯这些人,总是把人带的太深而且,别的大学课程也不会比MIT 次到哪里去。
大傻 发表于 2011-10-25 16:50 static/image/common/back.gif
看不惯这些人,总是把人带的太深
这是我在博客园转来的一篇帖子,其实我也只是一个入门都谈不上的初学者。我觉得这帖子还不错就转过来;现在看来转来也是好事儿。至少大家也可以看到另一面的观点,比如您的~至于每个人的学习道路,都会有自己的方式。我的转帖,您的建议都顶多只是“参考”罢了。 tsembrace 发表于 2011-10-25 16:54 static/image/common/back.gif
这是我在博客园转来的一篇帖子,其实我也只是一个入门都谈不上的初学者。我觉得这帖子还不错就转过来;现 ...
;P无所谓了,仁者见仁智者见智啦, 参考就不用加引号了 我眼睛不瞎~ 入门还是学C比较实际些 不要马上想这要做出什么 不要被所谓的成就感所迷惑 而且C是很考验数据结构实现方法的 本帖最后由 不忘 于 2011-10-29 01:16 编辑
不值得新手参考 你这说的是程序员的发展趋势对新手来说 那是一种打击 能少走点弯路哈 :D 作为新手,我表示鸭梨很大呀! 这是神马,对于新手是毁灭性打击啊,学会这些要学到老了 真的是很好的建议和学习的 打击打击死俺了,你咋不说进阶到发明自己的系统自己的语言呢? 学完得多长时间哦 大傻 发表于 2011-10-25 16:39 static/image/common/back.gif
又是不靠谱的文章。。。。
启蒙入门
朋友你好,有时候我们不可否认那些东西说的很浮夸,但是我们更注重的是基础。对于编程这个行业,所有的高手都认可一通百通,所以我们要先追求一门的“精”,再去掌握多门的“通”!当然,学精肯定不能只是吃书本,那样永远的精不了,学的差不多了就要去实践,在实践中才可以知道那些东西的实用!当然那些国外的公开课很推荐一看! 写的强啊,我除了Web方面的知识涉及到一小部分还算熟练,其他在我这里全都是新概念,加油,充电。。 对新手来说是爆破性打击. 推荐阅读《代码大全》《重构》《代码整洁之道》 好像很厉害的样子
页:
[1]
2