不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
(重要的事情写三遍!)
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++,学会如何配置代码补全,外观,外部命令等。使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、C语言和操作系统调用
重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。 用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序);多进程多进程购票的程序。
不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程
4、学习Java
Java 的学习主要是看经典的 《Java编程思想》;学会查阅Java API Doc ,了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。学会使用IDE Eclipse,使用Eclipse 编译,调试和开发Java程序;建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。
5、Web的安全与架构
重点:
学习HTML5;
Web开发的安全问题;
HTTP Server的rewrite机制,Nginx的反向代理机制,Web的静态页面缓存技术。
学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
6、学习关系型数据库
达到能够优化数据库查询的水平(参看《高性能MySql》)
7、网站系统架构
1、负载均衡。HASH式的,纯动态式的。
2、多层分布式系统 – 客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。
3、CDN系统– 就近访问,内容边缘化。
4、P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。
5、服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。
6、虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。
7、学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
8、学习Hadoop。Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
9、了解NoSQL数据库
课本总结:
Java:
入门:Java语言程序设计(基础、进阶)
中级:Java编程思想
性能改进:并发编程实战,Java性能权威指南、深入理解Java虚拟机
脚本语言;
学习运用:PHP/Python/JavaScript
掌握程度视个人职业发展而定
C:
回顾:一站式学习C语言/C语言程序设计(K&R)
计算体系:
深入理解计算机系统
计算机网络、TCP/IP协议
Unix高级环境编程
网站:
科普总览:大型网站技术架构:核心原理与案例分析
进阶:框架、架构在实践中学习
算法与数据结构:
算法或者算法导论、后者难度大一些
数据库:
入门:SQL基础教程
进阶:高性能MySQL