7年软件开发技术学习的经验与模式总结
一个好大的标题。当年还用着学习机的BASIC写“打字练习”程序的还上小学的我,或者想不到若干年后会有能力写出这样的文章。
一般来讲,写这样标题的人最好先介绍一下自己的技术学习经历或工作经历,以免浪费你的时间:)但我担心如果我介绍后,你就没兴趣往下看了 :)
我2000年就读于广州的一间一般的大学,毕业后一直从事开发工作,也不是什么出名的公司或大型的项目。我有不折不扣的技术人的“通病”:单纯而朋友不多,只会苦心钻研技术而缺少表达能力实际中的应变能力,内向,不合群……以前,我跟很多技术人一样,讨厌别人抽自己的短处。但后来我想,对于一个技术人来讲,这是对你“专业”程度的赞美词,因为这些缺点让你可以专注于技术。
但,慢着,先别因以上的言论而高兴或批评我。给点耐性再听我讲讲这离题的言论。好的技术人不等于是好的程序员。你可以是个技术强人,但如果你有以上我提到的缺点,并且程度严重到不能让你积极地参加到实际项目开发中,那你就不是一个好的程序员。程序员除了技术,还要懂得做人。或者,学会做人对一个程序员来讲,甚至比学会技术重要,如果你不用养家活口,那就可以是个例外了:)
正题吧:
一.如果要学习或应用新技术或框架或API。你如何下手?
1.知道这是什么 (What/Why)
假设你要学习JSF,并只知道它是一个Web Framework,会如何开始?
一般的回答是:在 www.googlecom 或 BaiDu 中以 JSF 作关键字找相关资料。情况可能是你找到了:
-
-
中文的文章或BLOG
-
英文的文章或BLOG
-
eBook
(一般,对于外国的技术,Goolge会将官方网站排到第一位。主要的,也是英文的资料)
如果你是一个喜欢即学即用,不关心技术理论与规范的人,当然首先网上的文章或BLOG,一步步地跟着做 Hello World ,这里我不详述了。但如果你要将JSF应用于严紧的项目,那可以先看看官方的网站,找到(What is JSF / JSF Overview) 等文档。再看看非官方的,易入门的技术介绍文章。这可以让你对JSF有个了解,它能为你做什么,不能做什么,什么时候应该用,什么时候不应该用。新的技术,不一定就是最合适你项目的技术!
2.看Hello World 或 Sample (How)
不用多讲了,下载相关的类库(Class Library/Jar),找到一步一步教路的 Hello World 文章,跟着做,出现文章中没有提到的小问题,找到解决方法,千辛万苦后,Hello World总算可以运行了。兴奋一阵子后,再细看Hello World的实现方法。这是个无趣但一定要经过的过程。然后呢?
3.找书看
如果你面对的技术复杂,你又认为自己跟我一样不是一个天才,最好还是找个“导师”比较好。选一本好书,可以节省许多学习时间。因我大二前曾深受劣书之害:
当时我在学习C++,以VC为开发平台。我没有钱到书店购书,就一天到晚跑图书馆。什么"精通VC"、"百例学VC"、“VC教程”……一个个操作界面截图,一步步地教你如何做到书中的例子。但当中却没有讲到为什么要这样做,如果不这样做或不完全这样做或出现例外时如何处理。你不应该只停留于一步步地跟例子输程序,更应该了解例子的原理。或许这是我们从小教育模式的问题了,这里就不多说了。
其实,作为一个好的导师,除了教你如何用VC,更应该告诉你什么是VC,如何去学VC。他最少也要告诉你:
- 这是什么,它适合做什么,不适合做什么,其它的选择(What is it) : VC 只是一个开发平台,包括 IDE、C/C++ 编译器、C/C++ Std Library、Windows SDK 等,C++开发环境除VC外还有其它的。 它适合做Windows平台下的比较底层的系统级应用的开发。
C++本身不适合做信息化系统开发。用 VC 中的 MFC 库开发的软件一般不适合移植到其它非 Microsoft 平台(如 Linxu/Untix)。
除了 VC,你还可以选择 GCC 等。
- 如何到找参考资料:
授人以鱼,不如授人以渔。导师,更应该明白这道理。我有过这样的“惨痛”经历:
有两年时间,我直在练打字学 VC。为是什么说练打字。因我要把书中的例子输入到电脑中,但书中基本不会写,为什么要这样做。为什么要调用这个函数。每见到一个新的函数。我都用纸记下来它的参数与功能。直到后来,我发现有 “MSDN”API参考光盘,眼界才开宽了。
一般来讲,在网络时代,除了API参考文档,我们也要到官方网站,网上人气旺的网站,去学习与参考。学 VC 的人,如果不去 MSDN,可能要比别人多用几倍时间。
但,在工作中,我时常看到 Java 程序员电脑中居然可以没 Java API 文档。他也从来不去看在线的 API 文档。通常,这样的人要么是记忆力极好的高手,要么是不求甚解的程序员。通常,后者根本不去调用一个 Java 方法(method)前从不看文档……但通常,这样的人写程序比较快,BOSS比较看重。让我们在现实与理想间找到平衡点吧 : )
- 实现细节:
OOP、框架,函数库(Library),等已经深入人心的今天。“细节”我们有很多的理由不再去理会。用 C/C++ 的人不了解 编译(compile) 与 链接(link) 的原理。用 Java的人不了解 ClassLoader 的原理。有没有需要了解工具下层的实现细节?我觉得在于你是用工具来干什么,与使用工具的频率。例如,如果要长期用 Java 作开发,而且要自己直接面对不同的环境与平台(如JBOSS,Spring,Seam),且不是有其它人为你操心这些,那么,你有必要了解 Class Loader 是怎么样加载 Class 的。对于C/C++,我很难想像一个不了解其编译与链接基理的人会写出严谨的程序。
分享到:
相关推荐
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
1. **软件开发趋势**:2012年是云计算、大数据、移动互联网快速发展的一年。PPT可能涉及到这些领域的最新进展,如云计算服务模型(IaaS, PaaS, SaaS)、大数据处理框架(Hadoop, MapReduce)以及移动平台的开发技术...
Michael Bowers,资深Web开发专家,有18年专业软件开发经验。曾经作为首席软件工程师和架构师开发过各种项目,包括许多网站、应用程序框架、编译器、自定义语言,自动化工厂和销售管理系统。他拥有音乐理论硕士学位...
【2014年架构师大会PPT资料(Part1)】是一份珍贵的历史记录,汇集了当年中国架构师大会的部分演讲内容。这份资料包含了多个主题,覆盖了移动架构、电商平台技术、大型互联网数据中心的设计、云计算平台的网络构建、...
【淘宝技术嘉年华.part3.rar】是一个压缩包文件,包含了2015年淘宝技术嘉年华活动的部分演讲材料。淘宝技术嘉年华是阿里巴巴集团内部举办的一场年度技术盛会,旨在分享最新的技术趋势、实践经验以及创新成果,促进...
Pawel Kozlowski有15年以上的Web开发经验,接触过多种Web技术、语言和平台。他精通客户端和服务器端编程,并始终在寻找能提高生产率的工具和流程。Pawel是自由和开源软件的坚定支持者,他在AngularJS 社区非常活跃,...
4. **Tcon低碳淘宝_测试先行-竹权.pdf**:TCON可能是淘宝的一种内部项目管理或者技术会议名称,而“测试先行”强调了在软件开发中实施早期测试的重要性。竹权的报告可能介绍了如何通过自动化测试、持续集成等手段...
4. **Part 1 - Introduction**:这是课程的入门部分,可能包含了AGENT技术的基本概念、历史背景、重要性及其在软件开发中的应用前景。 5. **通信**:Agent之间的有效通信是多Agent系统的关键。这部分可能涵盖了...
如果需要具体的技术细节,例如在IT行业中,可能涉及到编程语言的学习、软件开发过程、系统优化策略等,那么这些内容应该根据实际情况来填充。 由于模板中的具体内容为空,无法提供更详细的技术知识。如果您能提供...
《Professional C# 2012 Code Part1》是一份重要的学习资源,它包含了C#高级编程2012年版的部分源代码。这个压缩包是针对那些希望深入理解C#语言特性和高级编程技术的开发者设计的。下面将详细阐述这部分代码中涉及...
10. 软件开发环境:介绍Keil uVision或其它51单片机的集成开发环境(IDE),如何编写、编译、下载和调试C语言程序。 11. 扩展接口技术:探讨如何扩展51单片机的功能,如连接LCD显示、使用EEPROM存储数据、与外部...