您的位置:首页 > 职场人生

给年轻程序员的建议--坚持这么做,你也可以成功

2015-05-06 00:00 525 查看
摘要: http://toutiao.com/a4308422121/ 服务端工程师入门与进阶 Java 版

1. 解决你自己的问题
从外面获取答案和自己解决问题、找到答案,这两种方式是有区别的。当你自己解决一个问题时,你不仅解决了这一个问题,也意味着解决了跟它类似的数百万问题。这是一个先投资后收获的过程。有时,你可能需要花2到3天的时间解决一个问题,这没什么;这是你的前期投资。
2. 从做小程序开始
我说的小程序,是指100行左右的。目前为止,《Java程序设计教程实验手册(Deitel and Deitel)》这本书是我见过的最好的编程书。从第一章到第十章,里面的所有习题都做一遍。当你做完了这些,你就对编程有了相当的掌握了。
3. 仿造软件
找一个你喜欢的网站或游戏,把它仿造出来。在你真正的想做一件项目前,先做完这个。这个能促使你学到前沿的编程技术,而且能让你更容易的被招聘公司选中。做3-5个这样的仿制项目后,你就能实现任意的你想要的东西了。
4. 每个项目都要学到新东西
每次项目都努力使用一些听到过但从未使用过的新东西。没有使用过Jquery,那下次项目中就使用它;没有试过测试驱动开发,下次项目就是你的实验品;你明白我的用意,对吗?
5. 说行
如果有人请求你为他做些什么东西,记得要说“行”——如果你从来没有给别人做过什么东西的话。我知道你可能会想,我自己还有无数的东西要做呢,但从经验来看,除了把主要时间花在自己有利可图的项目上外,你也应该花一些时间做一些慈善项目。这样做你会得到人们的认可,人们会想着你,如果有机会的会话,他们就会引荐你。
6. 交结程序员朋友
这是另外一个获得引荐机会的方法。总有机会,你的程序员朋友的盘子装满了,他们需要有人把多余的商业机会接下来。这时他们需要你出现。同样,当你的盘子装不下时,你也需要有人帮你把活接走。
7. 成为一个领域专家
广闻博识,同时要至少精通其中一项。编程世界很大,没有人能掌握所有东西,所以,要有一个专长。例如,成为一个本地应用或金融软件方面的专家。

遇到问题及时问你的 mentor 或者直接问我。 建议:

尽量用
google
查找技术资料。

多看官方的技术文档。

平时花一些时间在
github
上阅读优秀项目源码。

入门(1-2 个月)

目标:参与简单的项目开发。

技能:

熟练使用一种 IDE。Intellij IDEA或者 Eclipse 都可以,推荐使用前者。至少熟悉常用的快捷键,会 debug(包括远程 debug)项目。

熟悉一种编辑器。比如 Vim/Emacs,至少学会搜索/替换/代码补全。

掌握 Java。经典的《Java 核心技术:卷1 基础知识》(或者《Java 编程思想》)必看,跳过其中的图形和 applet 章节。习惯通过 Java API Doc。为了保证代码的质量,《Effective Java》、《Clean Code》和《重构》也需要至少通读一遍。

熟悉 Linux 开发环境和 bash shell。Linux 是我们的开发和部署环境,你最好尽快熟练它。Linux 的基本使用可以通过《鸟哥的Linux私房菜:基础学习篇(第三版)》学习,开发 bash shell 脚本可以参考《Linux Shell脚本攻略》。

掌握开发工具

掌握 JDK 以外的常用类库和工具包。JDK 原生 API 在很多场景下使用并不方便。你需要掌握社区贡献的优秀类库和工具包,比如 apache commons、google guava 等,具体可以翻阅《技术选型手册》的Utility 篇。

掌握 Web 开发框架。我们使用 Spring(或Rose) + Ibatis(或Jade) 开发 web 服务,你需要熟练掌握它们。

学习代码规范。我们大致上遵循 oracle 的 Java 语言编码规范,你可以先阅读并熟悉它。

熟悉开发流程。我们的开发流程大致如下:功能开发->单元测试->功能测试->Code Review->集成测试->发布。确保你熟悉其中的每个环节。

其他。需要熟练使用版本控制工具 Git(阅读:《Git 权威指南》),以及项目构建工具 Maven(阅读:《Maven实战》)。另外,在这个阶段可以尝试 TDD 开发。

进阶(2-6 个月)

目标:独立负责某个服务端项目

技能:

掌握 web 开发最佳实践,掌握 Restful API 设计,理解 Spring 原理。推荐阅读《Spring 揭秘》。掌握项目分层、子模块划分。推荐阅读:《J2EE 核心模式》。

掌握 web 架构设计。包括 Http 反向代理,数据缓存,负载均衡,水平扩展和垂直扩展。推荐阅读:《分布式Java应用:基础与实践》。

掌握关系型数据库。包括设计 MySQL 表结构,根据业务特点分表分库,基于执行计划的 SQL 分析优化,以及数据库容量规划。推荐阅读:《MySQL 必知必会》、《高性能 MySQL》。

了解 NoSQL。我们大规模使用 Hadoop、HBase、Hive,同时部分项目使用 Redis、Storm。你需要学会这些工具最基本的使用。

学习 web 安全知识。了解 web 前端安全问题。设计安全 web 服务,包括加解密、防伪造、防重放攻击等。

掌握 Http(推荐阅读:《图解 Http》、《Http 权威指南》)、Thrift 等协议。

掌握服务容量规划,性能调优,可靠性保证,以及故障处理。学习容量规划和性能调优知识,梳理业务监控点,熟练使用我们的监控报警系统。推荐阅读:《深入理解 Java 虚拟机》。

其他。设计模式:从项目中学习,有时间可以看看《深入浅出设计模式》、《JDK 里的设计模式》。学习Java Socket 编程与多线程知识,可以看看《Java 并发编程实战》,并翻翻并发编程网的文章。

深入(6 个月-)

目标:分布式系统和中间件开发。

构建知识体系:《大型网站系统与 Java 中间件实践》、《大型网站技术架构:核心原理与案例分析》。

原理与设计:《大规模存储式系统》、《UNIX 网络编程 卷1:套接字联网 API》、《How Tomcat Works》。

学习开源项目:Apache Thrift、Zipkin、Netty、Rose、Jade、淘宝 RPC 系统 Dubbo 等。分析项目中的设计思路。比如,同样是RPC框架,Finagle 和 Dubbo 有什么异同。

其他。根据参与的项目加深学习吧。比如,如果需要写 DSL,可以读一下《领域特定语言》,对 Redis 感兴趣推荐读一下:《Redis 设计与实现》。有两本书,无论做什么项目,都推荐读:《Unix 编程艺术》、《UNIX 环境高级编程(第3版)》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: