个人主页:http://callmewhy.com/
其实编程是一件非常有意思的事情,像造物主可以创造万物一样,每一个程序员都可以创造一片属于自己的世界。这就是我喜欢编程的原因,很简单,自由。
以下内容回记录汪海的编程生活,因为比较懒的原因,所以写的比较简单,其中坎坷曲折,一言难尽。再回头看以前写的代码,敲的程序,却也别有一番滋味。
个人兴趣飘忽无常,所以有些都没有深入学习,以后有时间再慢慢补上吧。
因为大一的课程安排,一开始接触的很多东西都是和Java相关的内容,从基本的J2SE起步。先来介绍一下Java的三个平台:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入式系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
J2SE:
ECLIPSE:
在后期的坦克大战基本就是用的Eclipse了,虽然一开始用EditPlus和Ultraedit很不习惯,后来换了Eclipse才发现此等神兵利器不早点用简直就是暴殄天物。不过后来觉得前期用基础的编辑器和命令提示行有利于更好地理解,也是必不可少的过程。Eclipse在后面的J2ME学习中也会用到,安卓的插件装上之后就可以运行虚拟机了,但是说实话运行速度比iOS的虚拟机差很多。
C:
大概是在大一上学期看完了所有的J2SE视频,至今仍觉得受益匪浅。当时是一边学习Java一边带着学习数据结构与算法,但是因为很多教程都是C语言或者C++,所以又自学了一些简单的C语言,学习C语言是为了给C++的学习打基础,但是后来发现两者其实联系并不是很大,相反,很多时候常常混淆,C语言因为是面向过程,所以基本应用于底层。当时看的第一本C语言书是《坐在马桶上也能看懂的c语言教程》,虽然十分浅显,但是对于只是想简单学习一下的同学来说已经足够了。
C++:
接着便是C++的学习,感觉和Java还是有很大的差异,虽然一些基本的语法有些相似,并且面向对象的C++相比于面向过程的C语言明显要更接近于Java,而且兼容了C的相关内容。具体的对比可以google看看。不过C++开发中最大的问题可能就是报错没有Java那么直接,Eclipse会明确的在编辑的时候就报错,当然RunTimeError另当别论。而C++的运行速度理论上在大多数情况下快于Java。还有对于垃圾资源的回收也是C++学习中比较大的问题。
VC++6.0:
小巧便捷是我的菜,但是没有代码提示着实不方便,而且语法高亮也不是很全面。于是去装了一个代码提示插件:Visual AssistX,简称VAX,安装前提是必须安装完整版本的VC6.0。有了代码提示功能之后就果断的抛弃启动极其缓慢的VisualStudio了,确实很方便。下载地址。
VISUALSTUDIO:
一开始是为了编写C++的时候有代码提示,但是后来发现每次启动VisualStudio的时间都十分长。后来主要用于C#的开发,确实很方便,开发大型的项目十分快捷,但是小型的数据结构实验之类的还是偏爱VC6.0了。生成项目很方便,简单的几步部署就可以,缺点可能就是生成的.NET项目需要目标电脑也有.Net FrameWork才能安装。[C#]如何使用VisualStudio生成可以安装的exe文件
到了大一的下学期,在J2SE的基础上学习了J2EE的内容。先是上网学了一会儿HTML的相关内容。感觉HTML只是框架,而且很多标签没有背的必要,所以简单的稍作了解即可。后来就养成了一个上网的时候随手右击查看页面源码的坏习惯。
CSS:
层叠样式表是用来做网页风格设计的,个人觉得CSS简单的稍作理解即可,懂得将美工与代码逻辑分开处理的思想,需要使用的时候再勤快的上网查查。选择器的概念设计的十分巧妙,四种基本选择器可以说包含了网页中的任何特定元素。不过这种修修补补的细腻活对于我这种审美障碍的人来说是一个比较大的问题。
PHOTOSHOP:
既然是前端,美工总得会做点,所以也开始学习PS,每天两个PS案例熟悉一下常见的处理。感慨一下PS真是十分强大的软件,职业美工的效率是吾等凡夫俗子望尘莫及的。做过两三张海报,后来无意中逛微博的时候发现当初的设计多处都是海报设计中的禁忌。
JAVASCRIPT:
JS是一种客户端脚本语言,说白了就是网页下载到本地之后才开始执行。JS掌握常用的几个案例的处理思路,懂得如何插入JS脚本也就能满足基本的使用需求了。前端不是我的菜,但是对JS和Java之间那种似曾相识的亲情还是比较怀念的。
DREAMWEAVER:
刚开始的时候使用记事本txt写Web端,后来发现使用DreamWeaver实在是太方便了,直接拖拽就可以生成代码。但是问题也很多,因为自动生成的代码有很多事冗余的。后来觉得Dreamweaver实在是太不方便了,所以还是习惯EditPlus编写网页,快捷方便可控制。
SERVLET:
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面,这是J2EE的入门第一步,一定要深入理解。但是因为当时没有做笔记,导致现在已经忘了很多。来年再补吧。
JSP:
在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页。Java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。在JSP+SERVLET的学习中会涉及到MYSQL或者SQLSERVER的数据库使用。JSP才真正让我有了造物主的感觉,每一行代码都可以自己亲手来控制。
MYSQL:
关于MYSQL学习我只是掌握了简单的SQL语句,增删查改和主键外键,因为只是为了学习JSP,所以其他的很多东西可以不做过深的了解。建议前期写SERVLET多用记事本编写,加强基本功的练习,还有JDBC的相关操作也一定要熟悉。
SQLSERVER:
与MySQL一样都是SQL查询语言,纯粹性能而言可能MySQL更为出色,如果你想建立一个.net服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQLServer服务器。如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。
JDBC:
JDBC是一种用于执行SQL语句的Java API,起步的时候会遇到很多问题,都是非常正常的现象,光是JDBC和MYSQL就部署了好几次才成功。但是当最后成功的时候那种成就感呀,啧啧。到了比较熟练的时候可以自己做个项目练练手,这时可以考虑使用IDE,也就是集成开发环境来提高工作效率,个人比较偏爱MYECLIPSE。
MYECLIPSE:
建议使用SERVLET+JSP+MYSQL+TOMCAT做一个MVC模式的小型网站DEMO。当时我是使用Tomcat做服务器,MySQL做Model,Servlet做Controller,Jsp做View,做的是一个用户注册登陆与管理系统,现在已经忘的差不多了,只记得当时的信息分页和数据库连接是两大难点,困扰了好久。比较后悔的是大学第一年很多事情没有及时做笔记的习惯,导致现在有时候想复习也无从下手。做完这个DEMO之后就可以继续学习SSH2框架了。一句话,J2EE要学习的东西太多了,上面这一系列纠缠只是开头中的第一步。
APACHE:
Apache是一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,跨平台性要比IIS好,而且和安全性能也很好,但是64位的操作系统一开始的时候搭建会出现各种奇怪的问题,需要配置一段时间。
PHP:
PHP和JSP一样是服务器端的脚本语言。感觉上手容易但是很多地方不是很习惯,如果是开发大型的网站而且对安全性能要求较高,还是J2EE比较适用。后来配合SAE,直接省去了Apache的配置,相对来说入手难度会小很多。推荐初期自己搭建Apache服务器,熟练之后可以去新浪申请云服务器做PHP开发。
EDITPLUS:
特别推荐一下常用的文本编辑工具:EditPlus。小巧灵便,而且对于标签的识别也很准确。更重要的是永久免费,而且打开的速度和系统自带的文本编辑器一样迅速。
SVN:
团队合作的版本管理工具,在多人共同编写项目的时候非常方便,直接提交做修改的文件即可实现替换。Xcode中如果SVN有所修改会提示U按钮提醒更新。后来使用SAE做PHP开发的时候基本都是TortoiseSVN做版本控制。
VMWARE:
因为加入了WeeGo工作室,便又转身投入了iOS的相关APP开发。iOS的开发需要Xcode作为开发环境,而Xcode又必须在Mac OS上才能运行,所以一开始花了很多时间在黑苹果上,也就是如何给我的联想本装上苹果的操作系统。具体内容可以参照远景论坛,总之最后成功了好几次,也失败了好几次,但是最后还是放弃了,因为实在是没有对应的显卡,就使用Vmware装了一个Mac的虚拟机,一并解决了显卡声卡网卡的不兼容问题。真正做开发还是Mac本好使,工作室的大多数代码都是在那台iMAC一体机上完成的。
OBJECTIVE-C:
iOS应用使用Objective-C语言编写,有点C语言的基础的话入手很快,当然没有基础也没有关系。学校里iOS相关的内容很少,一个是Xcode搭建的平台需求,另一个难点就是不如安卓来的方便,光是一个开发者账号一年就要99美刀,而且如果做真机测试还需要添加AppleID并且下载证书。
XCODE:
Xcode是我用过最好用的IDE,StoryBorad的推出也让iOS应用的后台逻辑更加直观。但是相关的教程不如Java等来的普及。比如当时一个瀑布流的问题就折腾了好几天,还有一次项目需求是联网杂志下载之类的,都需要亲自动手Google才行。推荐的开源代码库。跟着工作室做了两个项目,真心感受到了课程设计和商业项目完全是两个不同的需求。而至此,我的大一生活便告一段落。大二正式开始。
刚开始的时候因为听说图形学的课程和C#相关,所以学习了一段时间。后来才发现半毛钱关系都没有,不过C#本身确实挺有意思,特别是做windows应用的时候特别快,相当于升级版本的MFC或者可视化的Java,但是在语法上还是有一些的区别的,比如委托机制和OC中的委托有点类似,还有其他就不一一列举了,最后也是做了一个小游戏作为学习的结束标志。不过发布之后的exe或者msi安装的时候需要.NET Framework4安装,不如普通的VC来得方便。
UBUNTU:
接下来便是LINUX的学习,这是我最兴奋的一段时间,因为完全是一个崭新的世界。先是安装了各个版本的LINUX操作系统,REDHAT,UBUNTU,LINUX DEEPIN,最后FEDORA使用U盘安装总是出错只得作罢。后来删了其他版本只留下了UBUNTU因为比较喜欢它的界面,不过最新版本的UBUNTU不能自动安装无线网卡的问题困扰了我好久,可能是打开的方式不对。建议使用U盘安装或者硬盘安装,然后自己改一下引导就可以了,UBUNTU推荐的WUBI虽然支持windows下直接安装但是感觉像是一个windows下的程序而不是真正的双系统。对于装系统遇到问题是非常正常的,什么活动分区之类的最好事先做好了解,但其实也没有什么用,肯定会遇到你没有遇到过的问题。不过有前面黑苹果的经历,养成了及时上网搜索的习惯,再加上这些常用的软件,基本上所有问题都能解决。非常喜欢Ubuntu的GNUI界面,但是很多使用习惯都和Windows下的不太一样。有兴趣的同学可以试试。
总之LINUX确实很有意思,要不是因为本身不是学习软件工程的一定会好好研究。闲来无聊就看看韩顺平老师的LINUX教程,讲解的只是简单入门,深入的学习还是建议图书馆查阅资料。强烈推荐:鸟哥的Linux私房菜简体首页。
因为概率论的课本有简单的应用,所以照着写了几段代码,后来了解到它对图像和音频处理也有很好的支持,准备下学期好好学习吧。
UNITY3D:
这是一款非常强大的游戏引擎,在你学完了它的基本操作和C#以及JS脚本语法的时候,才算是真正入门了。因为如果要做项目,还有一大堆的插件需要使用。比如NGUI,UniSky等等。还为此写了专栏:汪海带你做游戏--Unity3D的开发与应用
VISIO:
这个就不算是编程相关的内容了,但是在绘制流程图的时候确实很方便。一般使用最多的就是矩形和线条,线条的箭头一开始还纠结了很久,后来看到老师绘制流程图的时候发现只要绘制普通的直线,最后再指定箭头。可以嵌入到WORD中真心各种方便。
AXURE:
创建网站的构架图、操作流程图、以及交互设计非常方便,上手也很方便。写了一篇文章整理了一下学习时候的相关内容:[Axure]原型设计软件:Axure RP简单介绍与基础入门学习目录。
UML:
一种非常常用的面向对象的建模语言,运用标准化的标记和定义实现对软件系统进行面向对象的描述和建模。适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。因为专业不是软件工程,所以涉及的较少,还需要进一步学习。
POWERDESIGNER:
工作室接到的蛐蛐儿Web端需要设计数据库,所以就开始了PowerDesign的学习,可谓是现学现卖,不过用来设计数据库和管理数据结构确实非常方便。入手不是很容易,需要对数据库的基本内容有一定了解。
ANDROID:
虽然在学J2SE的时候就有纠结过J2ME和J2EE到底学那个,但是现在发现不学点安卓的内容还是不行的。Unity3D这款游戏引擎会自动生成Eclipse项目文件,所以掌握了安卓之后一些高级的手机游戏开发也会更加顺畅。再加上蛐蛐儿应用的Demo只有iOS和Windows端,安卓只公布了SDK,所以深入的学习一下,也算是弥补一下前期的缺漏。
XML:
在项目中经常会用到XML配置相关文件,特别是在SAE和BAE的使用中更是非常常见,所以索性就系统的学习了一遍,感觉像是HTML的双胞胎弟弟,看着差不多,但是性格却基本不一样。
FOXMAIL:
Foxmail被腾讯收购后发送接收企业邮箱比网页端便捷,并且可以每隔一段时间检测邮件,唯一的缺点就是不能像网页端一样短信通知。
TORTOISESVN:
一款SVN的本地管理软件,进行版本控制十分方便,直接右击即可上传或者下载。简易教程:[SVN]版本控制软件:TortoiseSVN的简单操作
CYBERDUCK:
CyberDuck则是连接SAE的Storage时候的一个本地客户端,和连接SVN用的TortoiseSVN原理上差不多,都是本地操作云端数据,管理很快。
BAE:
百度推出的云平台服务,大约两天时间通过认证。BAE做小型项目基本全免,但是部署CodeIgniter的时候常常出现403Forbidden的错误,导致后来被我抛弃。
SAE:
SAE和BAE是新浪和百度的两大云平台,个人感觉SAE更专业一些。但是需要通过开发者认证成本才基本免费。相关介绍:[SAE]免费服务器:新浪云服务器SAE的注册与使用
THINAPP:
在使用C#编写蛐蛐儿会议签到软件的客户端的时候发现了一个问题:其他电脑基本都没有安装.Net Framwork。默认情况下需要联网下载.NetFramwork4,经过设置之后在项目的属性中选择必备项目按钮,然后选第二个选项,从我的应用中安装。这样就可以生成不用联网的C#项目,但是在xp的系统依旧无法运行,索性就做成了绿色便携的版本。使用工具是Vmware的ThinApp,非常好用的向导模式,推荐有兴趣的同学可以试试。
CODEIGNITER:
一款PHP的应用程序开发框架和工具包,大约20分钟可以创建一个简单的博客网站,非常便捷,入门教程:[PHP]框架教程:CodeIgniter框架的简易使用
SPRING+ STRUTS+HIBERNATE:
J2EE的基本框架,大二下学期再深入学习吧。
PYTHON:
今年是蛇年,于是就学一门长得很像蛇的语言来庆祝一下吧。Python是一种胶水语言,能够把各种模块轻松的连接在一起。“优雅”、“明确”、“简单”,这便是其魅力所在。语言特色有点类似于Matlab,和Java或C++有较大差异。
Win8的应用开发非常的有意思,基本包括了所有的编程语言,C++,C#,JavaScript+CSS,均可以进行Win8开发。而且Metro风格的应用简约却不失大气,十分有爱。
JQuery是一款非常优秀的轻量级JS框架, jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。在和同学们一起做项目的时候因为前端的东西涉及的比较多所以深入的学习了一下。类似于一个C++的STL类库,有很多现成的方法提供使用。
因为Unity3D的需要,迫不得已学了一下Maya的简单操作。只能说实在是博大精深,慢工出细活。对于我这种临时凑数的人,一个简单的骨骼动画就调试了很久。做3D模型必备的强势软件。
一个交互式学习的网站,在上面学完了jQuery的课程,感觉很有意思,推荐给大家。Codecamedy链接
PYGAME:
Pygame是 跨平台 Python模块,专为电子游戏设计。 包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。学习的资料不是很多,但是并不影响学习的进度,学习的网站是:http://eyehere.net/2011/python-pygame-novice-professional-1/
DJANGO:
Django是一个Python定制框架学习姜戈的原因是SAE提供的Python服务中含有此框架,出于好奇心就学习了一下,感觉MVC的模式和PHP的CI框架基本类似,准备和学弟一起做一个SAE的Django项目感受一下。
WEBGL:
WebGL是一种3D绘图标准,把JavaScript和OpenGL 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,做网页上的3D游戏是一个不错的选择。
OGRE:
一款3D的游戏渲染引擎,比OpenGL略高层,使用VS开发,我们三个人使用OGRE+MYGUI开发3D游戏《进击的雪人》。
COCOS2D-X:
Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,跨平台性能很好,研究中。推荐CSDN上一个制作微信打飞机游戏的教程,很有意思。
PHONEGAP:
和嵌入式同学的合作开发理发店的iOS版本,于是接触了这个跨平台的神器。一个基于HTML,CSS和JavaScript的创建移动跨平台移动应用程序的快速开发平台。可以很方便的把web项目内嵌到App中做成一个独立的App。
TEXTUREPACHER:
我们做的游戏最终要运行在安卓手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。所以我们要针对OpenGL ES来进行优化。
WORKTILE:
一个团队协作的网站,可以给队员分配任务,监督进度,方便简洁。
OPENCV:
OpenCV是一个基于开源发行的跨平台计算机视觉库,在数字图像处理的课程上接触并写了几个简单的项目。用来解决图像处理的问题真是十分强大,适合人脸识别,边缘强化,高斯模糊等很多处理。
JQUERY-MOBILE:
大三寒假接了一个项目,一个短租行业的学长想做个微信公共平台来推广自己的短租业务。具体的功能就是微信公共账号然后跳转到网页上继续操作,有点像手机内嵌App的感觉。JqueryMobile是专门用来做手机端显示的前端框架。很多基本的UI都会提供并且做好适配。
GROOVY:
一种基于Java虚拟机的敏捷开发语言,和Python有点类似,特点就是方便快捷,结合了Python、Ruby和Smalltalk的许多强大的特性,能够和Java代码无缝衔接。
GRAILS:
大三寒假的短租项目项目,用的是Grails框架。 一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。 开发效率很高,感觉类似于PHP的CI框架。
计划:Haddop,Node.JS,Ruby,ROT.
教程可以良好的引导你的学习,但是养成一个随手google的好习惯比挑选一本好教程要来的重要的多的多的多的多。
而养成一个每天总结回顾的好习惯也将大有裨益。