阿布云

你所需要的,不仅仅是一个好用的代理。

程序员的进修(二)

阿布云 发表于

p1.png

进阶加深

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 Windows程序设计》)
  • 写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。
  • 写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。
  • 学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。
  • 这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
  • 不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。

2、学习Java

  • Java 的学习主要是看经典的Core Java 《Java核心编程技术》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)
  • 学习JDK,学会查阅Java API Doc 
  • 了解一下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语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。
  • 推荐阅读《代码大全》《重构》《代码整洁之道