`
qwzs112
  • 浏览: 120556 次
文章分类
社区版块
存档分类
最新评论

工作中的程序员如何进阶

 
阅读更多

前言

你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)

建议:

不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少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、学习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 + 静态页面缓存的网站

写了那么多,回顾一下,觉得自己相当的有成就感。希望大家不要吓着,我自己这几年也在不断地学习,今天我也在学习中,人生本来就是一个不断学习和练级的过程。不过,一定有漏的,也有不对的,还希望大家补充和更正。

推荐阅读:

高效程序员的7个特征

月薪3万的程序员都避开了哪些坑

5
4
分享到:
评论
3 楼 pqc271662322 2015-12-09  
转载的时候麻烦注意表明出处好吧,而且就算你抄能不能抄完呢?原出处
http://coolshell.cn/articles/4990.html陈皓《程序员技术练级攻略》
2 楼 qwzs112 2015-11-20  
DreamRoute 写道
然而这并没有什么卵用!

   怎么会没用呢
1 楼 DreamRoute 2015-11-20  
然而这并没有什么卵用!

相关推荐

    C++程序员进阶书籍3本

    以下将根据给定的书籍标题和描述,详细介绍这三本书籍可能涵盖的知识点,以及它们对于C++程序员进阶的重要性。 1. **《优秀程序员的编程习惯》** 这本书可能着重讨论如何培养良好的编程习惯,这对于任何程序员的...

    硅谷程序员进阶之路

    硅谷程序员进阶之路,囊括程序员面试内容,包括操作系统、计算机网络、组成原理以及算法。

    游戏程序员进阶之路 一些优秀书籍文档介绍

    【游戏程序员进阶之路:优秀书籍文档推荐】 游戏程序员的成长是一个不断学习和实践的过程,而优秀的书籍和文档无疑是提升技能的重要资源。以下是一些针对游戏程序员的精选书籍,涵盖了算法、数据结构、汇编语言、C/...

    1 Java 程序员进阶之路(暗黑版)1

    【Java程序员进阶之路(暗黑版)1】是一篇专为Java爱好者设计的进阶教程,旨在通过详细且通俗易懂的方式,帮助读者提升Java技能。本专栏内容涵盖Java基础、集合框架、IO、并发编程、虚拟机、企业级开发等多个核心...

    程序员进阶修炼说明35岁前要培养的66种明智思维

    ### 程序员进阶修炼说明:35岁前要培养的66种明智思维 #### 第一部分:剑走成功偏锋——另类思维与反弹琵琶 在这个快速变化的时代,要想在IT行业中脱颖而出,单凭传统的思维方式往往难以达到预期的效果。因此,**...

    Java程序员进阶之路

    java进阶,包含 常用设计模式、线程和并发、spring核心代码、mybatis核心代码、springboot2.0、springcloud 、docker的使用、各类面试题。

    【电子版*面试必读】Java程序员进阶知识点-java篇.pdf

    根据提供的文件内容,这份文档是一份关于Java程序员校招面试的指南,名为“【电子版*面试必读】Java程序员进阶知识点-java篇.pdf”,它主要分为学习说明和面试技巧两部分,接下来将对这两部分进行详细的知识点解析。...

    程序员进阶攻略.epub

    程序员进阶攻略

    笔试题库:程序员进阶宝典-markdown材料.zip

    本 Markdown 材料《程序员进阶宝典》是专为准备技术面试的程序员打造的一份宝贵资源。它汇集了丰富的笔试题库,旨在帮助您巩固基础知识,提升编程技能。这份材料覆盖了算法、数据结构、操作系统、网络、数据库等多个...

    软件工程——程序员进阶

    "软件工程——程序员进阶"这个主题涵盖了从设计思想到架构设计的广泛知识,旨在帮助程序员提升技能,成为一名更专业的软件开发者。这里,我们将深入探讨其中的核心知识点。 首先,提及的是弗雷德里克·布鲁克斯...

    《敏捷开发的原则》程序员进阶宝典

    敏捷开发的原则,程序员进阶的必备书籍。想要写出漂亮的代码,需要不断地吸取经验。

    基于Java程序员进阶之路的全面Java学习指南设计源码

    本项目是一份深入浅出、充满趣味的Java程序员进阶之路学习指南设计源码,包含387个文件,涵盖383个Markdown文档、1个.gitattributes文件、1个.gitignore文件、1个LICENSE文件和1个HTML文件。内容丰富,涉及Java基础...

    UML精粹--Java程序员进阶架构师推荐阅读书籍

    Java程序员进阶架构师推荐阅读书籍 UML其实和软件开发过程没有什么必然联系,却是软件团队协作沟通,撰写软件文档需要的工具。但是UML真正实用的图不多,看看这本书已经足够了,完全没有必要去啃《UML用户指南》之类...

    DSP C2000程序员高手进阶 PDF 版

    介绍 DSP C2000 的开发方法,适合DSP 程序员 高手进阶

    考试类精品--收集、记录后端面试各个方面的攻略,以及程序员进阶升级的资料参考.zip

    而“程序员进阶升级的资料参考”则表明这份压缩包可能包含了一些有助于提升技术水平、拓宽知识视野和职业发展的学习材料。 【描述】中的内容与标题相呼应,进一步确认了这个资源包的目的——帮助考生全面准备后端...

    DSP C2000程序员高手进阶

    DSP C2000程序员高手进阶,对初入门想提高的同学是个不错的东西

    程序员攻略

    详细介绍了面对众多的编程语言,应该学什么,怎么学,学到什么程度。 入门程序员进阶必看。 资深程序员的宝贵经验。

Global site tag (gtag.js) - Google Analytics