【php精品源码栏目提醒】:以下是网学会员为您推荐的php精品源码-程序员编程技术迅速提高的终极攻略 - 其它资料,希望本篇文章对您学习有所帮助。
前言你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)建议: 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来 至少 10 年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝 末节。
一定要学会思考,思考为什么要这样,而不是那样。
还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏 Unix/Linux,这是因为我觉得 Windows 下的编程可能会在未来很没有前途,原因如下: 现在的用户界面几乎被两个东西主宰了, Web, 移动设备 iOS 或 Android。
1) 2) 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 和常见的命令行 至少学会用虚拟机里的 linux,vmware player 是免费的, 如果你用 windows, 装个 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 Definitive 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 程序设计 ,MFC 程序设计) 写一个窗口,了解 WinMain/WinProcedure,以及 Windows 的消息机制。
写一些程序来操作 Windows SDK 中的资源文件或是各种图形控件,以及作图的编 程。
学习如何使用 MSDN 查看相关的 SDK 函数,各种 WM_消息以及一些例程。
这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
不用太多于精通这些东西,因为 GUI 正在被 Web 取代, 主要是了解一下 Windows 图形界面的编程。
virushuo 说:“ 我觉得 GUI 确实不那么热门了,但充分理解 GUI 工作原理是很重要的。
包括移动设备开发,如果没有基础知识仍然很吃力。
或者说移动设备开发必须理解 GUI 工作,或者在 win 那边学,或者在 mac/iOS 上 学”。
2、学习 Java ( Java 的学习主要是看经典的 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、学习关系型数据库 你可以安装 MSSQLServer 或 MySQL 来学习数据库。
学习教科书里数据库设计的那几个范式,1NF,2NF,3NF,…… 学习数据库的存过,触发器,视图,建索引,游标等。
学习 SQL 语句,明白表连接的各种概念(参看《SQL Join 的图示》) 学习如何优化数据库查询(参看《MySQL 的优化》) 实践任务:设计一个论坛的数据库,至少满足 3NF,使用 SQL 语句查询本周,本月的 最新文章,评论最多的文章,最活跃用户。
5、一些开发工具 学会使用 SVN 或 Git 来管理程序版本。
学会使用 JUnit 来对 Java 进行单元测试。
学习 C 语言和 Java 语言的 coding standard 或 coding guideline。
(我 N 年前写过一篇 关 C 语言非常简单的文章—— , 《编程修养》 这样的东西你可以上网查一下, 一大堆)。
推荐阅读《代码大全》《重构》《代码整洁之道》高级深入1、C / Java 和面向对象我个人以为学好 C,Java 也就是举手之劳。
但是 C的学习曲线相当的陡。
不过,我觉得 C是最需要学好的语言了。
参看两篇趣文“C学习信心图” 和“21 天学好 C” 学习(麻省理工免费课程)C面向对象编程 读我的 “如何学好 C”中所推荐的那些书至少两遍以上(如果你对 C的理解能够深 入到像我所写的《C虚函数表解析》或是《C对象内存存局(上)(下)》,或是 《C/C返回内部静态成员的陷阱》那就非常不错了) 然后反思为什么 C要干成这样, 则不是?你一定要学会对比 C和 Java 的不同。
Java 比如,Java 中的初始化,垃圾回收,接口,异常,虚函数,等等。
实践任务: 用 C实现一个 BigInt,支持 128 位的整形的加减乘除的操作。
用 C封装一个数据结构的容量,比如 hash table。
用 C封装并实现一个智能指针(一定要使用模板)。
《设计模式》必需一读,两遍以上,思考一下,这 23 个模式的应用场景。
主要是 两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。
(也推荐《深入浅出设计 模式》) 实践任务: 使用工厂模式实现一个内存池。
使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。
使用命令模式实现一个命令行计算器,并支持 undo 和 redo。
使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、 等影响价格的因素。
学习 STL 的用法和其设计概念 - 容器,算法,迭代器,函数子。
如果可能,请读 一下其
源码。
实践任务:尝试使用面向对象、STL,设计模式、和 WindowsSDK 图形编程的各 种技能 做一个贪吃蛇或是俄罗斯方块的游戏。
支持不同的级别和难度。
做一个文件浏览器, 可以浏览目录下的文件,并可以对不同的文件有不同的操作, 文本文件可以打开编辑,执行文件则执行之,mp3 或 avi 文件可以播放,图片文件 可以展示图片。
学习 C的一些类库的设计,如: MFC(看看候捷老师的《深入浅出 MFC》) , Boost ACE CPPUnit,STL (STL 可能会太难了,但是如果你能了解其中的设计模式 和设计那就太好了,如果你能深入到我写的《STL string 类的写时拷贝技术》那就非常 不错了,ACE 需要很强在的系统知识,参见后面的“加强对系统的了解”) Java 是真正的面向对象的语言,Java 的设计模式多得不能再多,也是用来学习面 向对象的设计模式的最佳语言了(参看 Java 中的设计模式)。
推荐阅读《Effective Java》 and 《Java 解惑》 学习 Java 的框架,Java 的框架也是多,如 Spring Hibernate,Struts 等等,主要是 学习 Java 的设计,如 IoC 等。
Java 的技术也是烂多,重点学习 J2EE 架构以及 JMS, RMI 等消息传递和远程调 用的技术。
学习使用 Java 做 Web Service (官方教程在这里) 实践任务: 尝试在 Spring 或 Hibernate 框架下构建一个有网络的 Web Service 的远 程调用程序,并可以在两个 Service 中通过 JMS 传递消息。
C和 Java 都不是能在短时间内能学好的,C玩是的深,Java 玩的是广,我建议两者选一个。
我个人的学习经历是: 深究 C(我深究 C/C了十来年了) 学习 Java 的各种设计模式。
2、加强系统了解重要阅读下面的几本书: 《Unix 编程艺术》了解 Unix 系统领域中的设计和开发哲学、思想文化体系、原则与经 验。
你一定会有一种醍醐灌顶的感觉。
《Unix 网络编程卷 1, 字 这是一本看完你就明白网络编程的书。
套接 》 重要注意 TCP、 UDP,以及多路复用的系统调用 select/poll/epoll 的差别。
《TCP/IP 详解 卷 1:协议》- 这是一本看完后你就可以当网络黑客的书。
了解以太网的 的运作原理,了解 TCP/IP 的协议,运作原理以及如何 TCP 的调优。
实践任务: 理解什么是阻塞(同步 IO),非阻塞(异步 IO),多路复用(select poll epoll) 的 IO 技术。
写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用 UDP 对部分或 所有的的聊天客户端进 Multicast 或 Broadcast)。
写一个简易的 HTTP 服务器。
《Unix 网络编程卷 2,进程间通信》 信号量,管道, 共享内存,消息等各种 IPC…… 这些技术好像有点老掉牙了,不过还是值得了解。
实践任务: 主要实践各种 IPC 进程序通信的方法。
尝试写一个管道程序,父子进程通过管道交换数据。
尝试写一个共享内存的程序,两个进程通过共享内存交换一个 C 的结构体数组。
学习《Windows 核心编程》一书。
把 CreateProcess,Windows 线程、线程调度、 线程同步(Event 信号量,互斥量)、异步 I/O,内存管理,DLL,这几大块搞精通。
实践任务:使用 CreateProcess 启动一个记事本或 IE,并监控该程序的运行。
把前 面写过的那个简易的 HTTP 服务用线程池实现一下。
写一个 DLL 的钩子程序监控指定 窗口的关闭事件,或是记录某个窗口的按键。
有了多线程、多进程通信,TCP/IP,套接字,C和设计模式的基本,你可以研究 一下 ACE 了。
使用 ACE 重写上述的聊天程序和 HTTP 服务器(带线程池) 实践任务:通过以上的所有知识,尝试 写一个服务端给客户端传大文件,要求把 100M 的带宽用到 80以上。
(注意, 磁盘 I/O 和网络 I/O 可能会很有问题,想一想怎么解决,另外,请注意网络传输最 大单元 MTU) 了解 BT 下载的工作原理,用多进程的方式模拟 BT 下载的原理。
3、系统架构 负载均衡。
HASH 式的,纯动态式的。
(可以到 Google 学术里搜一些关于负载均衡的 文章读读) 多层分布式系统 – 客户端服务结点层、计算结点层、数据 cache 层,数据层。
J2EE 是 经典的多层结构。
CDN 系统 – 就近访问,内容边缘化。
P2P 式系统,研究一下 BT 和电驴的算法。
比如:DHT 算法。
服务器备份,双机备份系统(Live-Standby 和 Live-Live 系统),两台机器如何通过心 跳监测对方?集群主结点备份。
虚拟化技术, 使用这个技术, 可以把操作系统当应用程序一下切换或重新配置和部署。
学习 Thrift,二进制的高性能的通讯中间件,支持数据对象序列化和多种类型的 RPC 服务。
学习 Hadoop。
Hadoop 框架中最核心的设计就是:MapReduce 和 HDFS。
MapReduce 的思想是由 Google 的一篇论文所提及而被广为流传的,简单的一句话解释 MapReduce 就是“任务的分解与结果的汇总”。
HDFS 是 Hadoop 分布式文件系统 (Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
了解 NoSQL 数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高 并发的纯动态型网站日渐成为主流,而 SNS 类网站在数据存取过程中有着实时性等刚 性需求,这使得目前 NoSQL 数据库慢慢成了人们所关注的焦点,并大有成为取代关系 型数据库而成为未来主流数据存储模式的趋势。
当前 NoSQL 数据库很多,大部分都是 开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet升级版为 Kyoto Cabinet、Flare、MongoDB、CouchDB、Cassandra、Voldemort 等。
写了那么多,回顾一下,觉得自己相当的有成就感。
希望大家不要吓着,我自己这十来年也在不断地学习,今天我也在学习中,人生本来就是一个不断学习和练级的过程。
不过,一定有漏的,也有不对的,还希望大家补充和更正 1)有朋友奇怪为什么我在这篇文章开头说了web移动,却没有在后面提到 iOS/Android 的前端开发。
因为我心里有一种感觉,移动设备上的 UI 最终也会被 Javascript 取代。
大家可以用 iPhone 或 Android 看看 google,你就会明白了。
2)有朋友说我这里的东西太多了,不能为了学习而学习,我非常同意。
我在文章的前面也说了要思考。
另外,千万不要以为我说的这些东西是一些新的技术,这份攻略里 95以上的全是基础。
而且都是久经考验的基础技术。
即是可以让你一通百通的技术,也是可以让你找到一份不错工作的技术。
3)有朋友说学这些东西学完都 40 了,还不如想想怎么去挣钱。
我想告诉大家,一是我今年还没有 40 岁,二是学无止境啊,三是我不觉得挣钱有多难,难的是怎么让你值那么多钱?无论是打工还是创业,是什么东西让你自己的价值, 让你公司的价值更值钱?别的地方我不敢说,对于互联网或 IT 公司来说,技术实力绝对是其中之一。
4)有朋友说技术都是工具,不应该如此痴迷这句话没有错,有时候我们需要更多的是抬起头来看看技术以外的事情,或者是说我们在作技术的时候不去思考为什么会有这个技术,为什么不是别的,问题不在于技术,问题在于我们死读书,读死书,成了技术的书呆子。
5)对于 NoSQL,最近比较火,但我对其有点保守,所以,我只是说了解就可以。
对于 Hadoop,我觉得其在分布式系统上有巨大的潜力,所以需要学习。
对于关系型数据库,的确是很重要的东西,这点是我的疏忽,在原文里补充。
上一篇:
ECSHOP详细目录文档
下一篇:
企业管理论文:电力企业管理中的绩效考核工作