- UID
- 156027
- 热情
- 1392
- 人气
- 1013
- 主题
- 77
- 帖子
- 2734
- 精华
- 2
- 积分
- 2645
- 分享
- 0
- 记录
- 0
- 相册
- 2
- 好友
- 1
- 日志
- 0
- 在线时间
- 3341 小时
- 注册时间
- 2008-9-11
- 阅读权限
- 30
- 最后登录
- 2015-10-16
升级 43% - UID
- 156027
- 热情
- 1392
- 人气
- 1013
- 主题
- 77
- 帖子
- 2734
- 精华
- 2
- 积分
- 2645
- 阅读权限
- 30
- 注册时间
- 2008-9-11
|
本帖最后由 duncan_kai 于 2010-8-13 16:24 编辑
正好今天结束了现在的工作,下周一开始要去新公司上班了,闲着也是闲着,就随便写写吧.事先声明,我是啥都不懂的人,如果您是IT精英学子,请师从只指点精英学子的IT精英壮男哥,咱是粗人,写的东西只配给IT业混饭吃的挨踢民工.
见过太多的争论,语言之间PK,GPA和工作经验PK,大公司和小公司PK,我也就随便发表发表我的看法,想到啥说啥.
首先,有人说应该要熟悉数据结构和算法,语言的话,掌握一门语言以后其他语言都大同小异,花个一个来月熟悉一下语法API就可以了.我只能说说我的情况,我最早在大学里自学的vb,开发过一些小程序并正式工作过一小段时间,来澳洲了以后主攻java,不过兼职过php的开发,有几个assignment用的是c,.net.正式工作还是以java为主,不过有一些c写的tuxedo binary需要维护和修修补补.在我看来,每个语言都有其优势和劣势,存在即合理,没有一家独大的.
PHP和c:
php开发小的web 系统很快很方便,而且有大量open source资源,你日常上的论坛,小型网站,几乎处处可见php.没有复杂的framework和design pattern(或者说大部分人都不太讲究),语法和api也比较简单,并且和unix整合非常好(一个简单的例子,假如你想你的网站处理上传的图片,生成thumbnail或者加水印,php下可以直接调用本地可执行文件,如果你用纯java solution,非常慢且占资源),最主要的,大部分php hosting都很便宜,$10一个月的一把一把的,java的?我目前没发现有便宜的,什么?你还想要独立jvm?要啥自行车啊?缺点是没有命名空间(相对java的package),没有compiled unit,IDE support就很差,和c一样,我把oscommence整个源代码全看了一遍重新模块化了一下方便我customise,但是还是太恶心了,想查一个method的出处还要用find & grep,对应eclipse里的ctrl click,实在无法想象如果要我每天负责维护php系统该有多恶心.而我维护debug我公司的tuxedo也够我受的了.ps:以前一直以为拿vi写程序的都是大牛,现在觉得那种行为和在公车上还要开笔记本"工作"的人一样,装逼!总结来说,大型的有一定规模并且需要日常维护的系统,选择php和c的不多.
.net:
主流语言,随着互联网的发展,服务器端开发基本就是java和.net之争了,.net我了解很少,只做过一个作业,从我当年vb6的经历来看,微软对于兼容性不很重视,我以前国内那个公司的系统就需要同时安装vb4,5,6,我靠.还有一个硬伤就是他是microsoft的,大型商用系统很少运行在windows server,除非哪天能有unix下的.net虚拟机.当然.net的工作机会相当多,因为毕竟用windows server的公司数量上肯定比用unix的要多.
java:
我的最爱,呵呵.语言设计之初就是吸取众家所长,随着越来越多framework,library的产生,使用者也是越来越众.不过也越来越复杂,不过其实当你真正了解了一套系统的整个流程运作以后,就会觉得所有的framework其实理解起来都很容易,不需要死记用法,只要知道他能干什么随时google就可以了.
再扯扯做开发到底是进小公司还是大公司好的问题,我的看法,小公司里一个人也许要负责更多的部分,接触的东西更多,从设计,实现,测试,发布以及整个项目的管理也许都要涉及,的确看上去更锻炼人,不过有一点,小公司之所以是小公司,就因为他们手上没有大项目,如果你不做大系统,大项目,就不可能接触或者了解到一些知识,那些说什么学精一门语言别的语言顶多花一个来月就能上手的人肯定没什么commercial experience.简单来说,一个月时间的确足够你学会语法api,那么假如做一个简单的web系统,基本都要连数据库吧,那就需要transaction吧,这里说的是application transaction不是db transaction,如果是一个long lasting transaction,那么怎么平衡performance和concurrent control?小系统大概自己写个locking就可以了,performance不会太差,如果访问量大的话,是不是就该考虑cache了呢?为了performance就肯定会用optimistic locking,怎么掌握这个balance肯定就需要不断的tuning吧,那就又需要logging了吧?大部分人或者公司老板不会选择reinvent the wheel,都会选择成熟的framework和library,比如hibernate,hibernate有java和.net的版本,所以不论你选择什么语言,这些需求都是存在的,并且你要么自己开发一整套东西,要么就要学习一个主流的library,我不觉得一个月内就能熟悉hibernate的整套东西.再回到logging,一样的,你可以自己写,但是你怎么保证多线程下访问同一个log file不会造成塞车?也可以用现成的,新接触一门语言的人知道log4j和commons logging都有啥区别吗?哪个好?为什么log4j推荐用if(logger.isDebugEnabled())?因为java string concatenation is expensive.我公司做performance test的时候就发现bottle neck居然是在logging上,因为很多人没有用前面那个if statement,所以有很多无谓的string concatenation.而这些东西,如果在小公司你可能永远都不会留意到.也不可能通过书本学校学习到.这也是为什么很多公司招聘写明必须有多少年commercial experience并且懂得什么什么framework.你未必需要知道具体的framework api,这东西也没用因为更新换代或者换framework很平常,需要的时候google就行.但是你最好知道有哪些流行的framework,分别是来解决什么问题的.
所以说,选择小公司还是大公司,完全看个人,如果你还不知道自己将来想干什么,那么去小公司多接触一些事情,然后就知道自己的发展方向到底是BA,tester还是developer.如果你已经很明确你的career path,当然是大公司更好,不要觉得一辈子做coding很可悲,那是国内的观念,如果你热爱开发,你甚至在日常生活中想要一个什么软件也会考虑自己写,根本就不会觉得一辈子做他是痛苦或者没前途的事.并且也不会因为年纪大就能力下降或者觉得累.而且其实大公司也能发现这些,毕竟你真想了解其他team的工作,人家也不至于说什么都保密吧.选择你的career path不用听别人怎么说,应该选你自己喜欢并且有激情的,钱的话其实到了一定程度都差不多少.
不写了,祝论坛里所有非精英都能找到适合自己的工作,争取早日让壮男哥看得起 |
|