主题:关于Linux的推广——普通用户篇 -- 万斤
想想我自己适应某个系统也要花这么长时间,一两年是个很正常的时间。如果是朋友什么的,我一般是采用按需替换的方法,比如他们找我装金山词霸,我就给他们装StarDict,帮他们看计算机问题的时候,顺手就给他们装Firefox,一般他们都接受。
最近有一个例子,我一个做财务的朋友,连MS Office安装都不会(就是连Setup.exe都不知道在哪里)。有一天在外地Office忽然不工作了,我通过电话帮他装上了OpenOffice,他一直用的很开心。
至于第8点,如果不是在公司环境并且我不在边上,或者他不是经常联系我,我一般是不做的。
尤其国内,没听说哪家的插件支持Linux的。
我可以不用MSN和QQ,但为了从网上缴费和买东西也离不开WIN。
今天我大概说说有关一个开发人员,就是对计算机有相当了解的人,如何逐步享受Linux提供的优势。
多说一句,我第一篇的点子,刚开始是一些简单,随意的个人行为。后来主要是受我女朋友的课题的影响,她的博士课题是研究某个现代管理系统,比如ERP系统,如何融入公司的。这个课题本身很复杂,她看过的材料大改1-2米还是有的,其实很多公司部署都或多或少地没有达到目标。所以现在都是采用按需分配,逐步改进,以用户满意,满足功能为目标。有很多具体的步骤。我上文提出的建议,也是参照了她的意见的。
和很多人想象的不太一样。实际上,我发现开发人员,尤其是windows下面的开发人员,远比普通用户对Linux来的排斥。尤其是上了班的人,他们宁愿用苹果也不会用Linux,所以目前大量对Linux的热心人实际上是在学校。
原因是非常简单的,对于win下面的计算机专业人员,他们对win系统投入远比一般用户多,而且对win很熟悉。像一般用户害怕的病毒,或者重装软件之类,并不陌生。而转换linux的成本,实际上远远比普通用户来的高。熟悉Linux的人都知道,那个东西对专业人员提供的功能要远远超过给普通用户提供的功能,而且要难的多。最简单的例子,在VC++(我用VC的时候是6.0,现在不清楚了)开发一个简单的程序,只要写好程序,直接运行就是。而在Linux下面,就要先学习编辑器,编辑器编程模式,GCC,Make,(甚至autotools)等等等一系列的工具,而这些工具每个都有很长的手册。所以等win系统的人已经开始直接写程序了,而linux下面的人通常还在花一两个星期在了解基本概念方面。而且对用户英语的要求实际上很高。广大英语不是母语的开发者对此往往很头痛。一个典型的例子就是,命令参数大多是英语的缩写,这对西方人不是问题,而中国人就要强行背。比如用tar的展开一个压缩包,命令是tar xzfv,我的同事用的时候,直接就念 tar eXtract Zipped File and Verify。中国人运用这个命令的难度就比GUI方式来的大。换句话说,命令行系统其实对语言要求比GUI来的严格,所以windows的流行不是一个偶然因素。
平心而论,Windows对开发界面方面还是投入了大量的精力,编辑器相当友好,直到现在我也认为Linux下面的程序编辑器没有一个达到它的水平,这个不可否认。所以当开发人员切换到Linux下面的时候,往往是从天上掉到地上。我记得01年的时候,我还在到处找一个合适的IDE和一个友善的编辑器(我记得用的是nedit)。所以,通常情况下,win开发人员不会轻易地转到Linux下面。实践生活中,我发现只有一个理由总是有效的:上面,或者工作强迫他这么做,或者单位里面都在用Linux/Unix系统。其他情况我想劝是难度很大的,伤感情。
但是,并不是说其他开发人员就不感兴趣。如果真要说突破口,那就几乎从一点开始的:源代码管理系统。我发现win下面的开发人员很多(我不能说大多数,但是据我接触的来说)几乎都没有源程序管理的意识。这个我猜想是由于SourceSafe功能长期比较弱有关。对Linux的高级用户来说,是不太可以想象的。比如我自己,不仅程序,文档要用SVN(最近正在转换到GIT)上。就是内核配置文件 /etc dpkg 数据库等也是用版本保留工具保存的。所以如果能在工作组建立服务器,帮助他们保存源代码,我想这是一个好的起点。(我建议采用SubVersion)。
下一步,通常来说,win开发人员第一个问题通常就是有关Linux IDE的,因为对他们来说,IDE通常就是开发程序的全部。当然有人提到Editplus,其实这个也是一个变相的IDE。而Linux下面,说实话,真正实用的IDE就只有emacs和vim。所以最大的问题首先是要回去阐述最核心的计算机编程问题,编译,链接(动态链接),宏展开,Linux的文件结构。这些基础问题如果不清楚,后面过渡起来非常困难。而很多win开发员,根据我的了解,他们实际上并不是很清楚,往往和学校学习的相脱节。而Linux还是保持了比较严格的步骤。
不过作为过渡,很多人目前提到eclipse,尤其是使用Java的开发员,我本人没有用过eclipse,但是我听说,它可以链接到Subversion,而且C的模组写的相当好。所以我在这里做个推荐,当然如果有谁用过,麻烦添上相关信息。万分感谢。
开发人员真要迁移到Linux下面,通常会遇到我称为“学习死锁”的情况,要想熟练编程,通常需要学习某个“古怪”的编辑器,而要想真正能使用好此编辑器,又通常需要编程来带,并且要会各种命令行命令,而命令行命令本身又多又复杂,无从下手,需要学习无穷的帮助,而帮助本身还要看帮助。。。。为了解决某个小问题,都要牵涉所有的Linux的概念。通常为了解决问题,看了一圈最后,反而那个问题本身的解决方案无关紧要了。搭进去很多时间。这事我本人在转到Linux平台下,感觉最难的地方。即便是到了今天,也会遇到这种情况。
为了降低难度,我个人建议,一定不要盲目一下子脑袋发热,像学习windows那样,立刻装一个双启动Linux/win系统。实践证明,这样做是最费力气的。会导致这样的情况:Linux成为一个高级玩具,里面有很多好玩的东西,但是真正干活娱乐还是打开windows系统。好像Linux下面的东西了解很多,但是几乎不用来解决真正的问题。这个问题没有什么好避讳的:我差不多有一年半是这个状态。直到有一天,我把所有windows彻底删除为止。即便是到现在,我也是没有必要的情况下,绝不用windows系统。
为了解决“学习死锁”的问题,我个人建议一定要在win平台下学习至少一种编辑器,其实这个也没有什么好选的:vim,或者eclipse的编辑器,考虑到linux下面大量的配置工作,基本上vim是怎么也要学的。当然如果能学习eclipse 就更好了。vim刚开始学习比较困难,不过我这里有个诀窍:就是上来就了解一下vim 采用模式的思路。然后直接打印一份vim reference card放在桌子边上,很快就能学会基本的操作。
我这里起一个简单的转换方式,首先起一个独立的linux服务器/工作站来(我想目前大部分开发员都有两台以上机器)。这个机器上什么windows都别装,然后开始学习配置ssh和Subversion,通过两者的学习,了解基本的命令,和如何看帮助。这样做的目的主要是防止无目的“漫游式”地学习。接下来,我倒是建议,如果有时间,把Linux的启动过程好好了解一下,特别是如何使用rc.d系统重启服务。通常win程序员习惯重启,Linux下面这点应该得到改正。分发版我推荐Debian。Debian系统一个最大的好处就是,一开始安装的软件很少,所以你可以一步一步看到哪些包具体起什么作用。然后就是经典的 Hello world,这个程序。同时学习一些最简单的gcc/make的方式。
接下来一步很重要,我建议立刻倒回去整理了解linux的目录树结构,彻底了解比如 /lib /usr/include 之类的目录下到底是放什么的,还有就是库文件的命名方式。比如 libm.a 放在什么地方等等,命名规则怎么回事。这些事情很小,但是极端重要!了解这些对理解Make和GCC帮助极大。我以前就是太匆忙,结果回头还是要补上。
接下来Make是肯定要学习的。也不需要去通读Make 手册,简单看看就行,比如基本的变量,宏什么的。到这里,基本相关的Linux 开发基本步骤了解了。然后下一步是尝试把 hello world 用vim 下的subversion模块管理起来。我这里不是很熟悉,因为我个人通常使用emacs 系统。不过感觉应该是差不多。练习熟悉了,就可以考虑把windows下的程序移植到linux下来,直接进行开发。其他的linux相关配置可以暂时不用管它,用到再学:)
最后,我说一句,不要没事重装Linux系统,Linux的可维护性相当相当好,99%以上的问题都可以通过不重启来解决。
这是我自己转移过程中的一些感想,写出来,希望对大家有所帮助
本帖一共被 1 帖 引用 (帖内工具实现)
万斤老兄说的很在理,开发人员转换开发平台到LINUX的难度很大.
我曾经去过一个公司,那个公司是做嵌入式LINUX底层平台的开发的.整个公司几十号开发人员,全部都用ULTRAEDIT,编辑好了源代码再SAMBA到LINUX服务器上去编译运行. LINUX下的程序员都是这个样子,可想而知转换难度有多大.
如果是JAVA程序员,在LINUX下还可以用ECLIPSE.但对C/C++程序员来说,一定要用VIM/EMACS来勾引他们.我用ECLIPSE写C程序的感觉是,这玩意太大太慢太费资源了,而且其功能也没法吸引我.写C程序,VIM无论是功能还是效率都比ECLIPSE好.
但如果有人实在接受不了VIM/EMACS/ECLIPSE中的任何一款的话,那就只剩下最后一招了:geany. 这个小东西是模仿EDITPLUS/ULTRAEDIT的基于GTK的轻量级IDE,目前为止,它的可用性已经很不错了,比起EDITPLUS,功能各有千秋,稳定性也没问题.
各大银行的老爷们根本就没想到还有LINUX这么个东西.
小弟我是在Windows下搞应用软件开发的,没有太多技术含量,简单说就是IT蓝领了。讲讲我的日常工作的开发环境。
如果是小东西,只有一两个用户的,我就用MS Access,好处是快,开发起来,极快。
稍微复杂点,可以把数据库移植到SQL Server上,前端依然是MS Access。
再复杂的,可以上.Net, Windows下的应用程序,可以用VB.Net/C#,Web的应用程序,可以用ASP.Net. 这些都有免费版。数据库当然是用SQL Server,这个也有免费版。
免费版有些限制。相对于项目开发成本来说,正版也不算很贵,几乎可以忽略不计。
暂且不论应用程序的性能,在Linux下搞应用软件软件开发,有些什么选择呢?举个典型的例子,我要开发一套影碟出租管理系统,在Linux下开发,大概要多少时间?用什么工具?什么数据库?
另外,Windows下也有好的版本控制软件的,叫ClearCase,贵,不是微软出的,据说微软也使用这个。
数据库;免费的从大到小有postgre,mysql, sqllite,h2,cloudscape也行,不过我觉得不好用
开发语言么: web的首选php或者ror,都是简单高效的东西。桌面模式么,可以选java或者qt,python也不错。
现在流行的一种做法是把web的东西包装成桌面来用。
另外。net有个linux的版本,已经实现了对asp.net的支持。
其实做这类应用级别的开发,win和linux区别不大。 win上的好处是做桌面的话ide好一点,控件多一些。做web的话没区别。
最近确实有个客户问我Linux下的应用软件的开发。这次有点特别,是条码打印机的一个应用程序,在Windows下很简单的程序,几个晚上的功夫。
但他反馈给我的意见是他的客户有不少开始使用Linux,比Windows省不少钱,问我把那个程序移植到Linux有多大工夫?我暂时回绝了他的要求。
澳洲这边似乎有不少人开始用Linux,有这种趋势,我也要提早做准备呀。
俺家领导想移民。
毕竟我不是爪娃阵营的,不同城市的工资水平也不同。
不过,8年经验的爪娃蓝领,我估计年薪在税前8万以上,澳洲这两年好景,更高也是有可能的。
可以去这里看看招工广告,澳洲最大的招工网址了:seek.com.au
其实在linux下开发,除了microsoft的其他的都能用,.net可以换成java,SQL server可以换成oracle/db2/mysql ...,ASP可以换成jsp/php,一些小的系统应用可以换成perl/python/shell script,源码管理可以用CVS。长期在win和linux两种OS下写程序,到哪山唱哪歌,习惯就好了。
不知道澳洲的LINUX C开发人员能拿多少?
其实现在一般应用的开发基本差别不大,差别大的都是那种系统和通用软件。考虑到应用开发将来会以动态语言为主,对跨平台支持一向不错,不需要这么担心。
对于普通用户来说,比如以办公和学习用途的用户,只要不玩游戏,linux和win差别不大。 而且linux因为可定制,对很多普通用户来说比win还要简单一些。
你有空可以找一个红旗的桌面系统来用,那东西仿的跟win2k差不多,常用软件,甚至紫光拼音都有了,而且蛮稳定,在政府部门我们推过这个系统。比较适合win用户,win上的一些软件也可以通过自带wine来跑, lotus什么的都没问题,当然缺点也就是太不象linux了,呵呵。
可以去这里看看招工广告,澳洲最大的招工网址了:seek.com.au
至于桌面系统,我从来没有在大公司见过Linux,但服务器见过几次,多数都是运行特定的数据库,估计是为了省钱。
对windows下的开发人员来说, 还是用kdevelop 最好。 几乎就是一个VC。对大多数开发人员来说,IDE rules.
editor, cscope, ctag, make, gdb, cvs , lisp, sh... 这套东西整个是与ide完全不同的一套思路。 普通人是根本不会适应,也没必要去适应的。
linux 下功能繁多,软件间interface也不标准, 我说的是绝对不会出问题的"标准". 很多时候是白费时间。 比方说,一个选项,可以在命令行里设,可以在这个文件设,那个文件设, 还有个文件设...你还要考虑编译的人缺省怎么设。到了最后你不知道该怎么设。看文档? 你是说哪份文档? 会不会象上回那个文档那样看两个小时,说得板上钉钉却没用?
很多时候标准自己变来变去。就象那些个目录结构的意义, 有意义么?软件在/usr/share里还是在 /opt 里? 我的盘是在 /mnt里还是在 /media里? 启动是 rc.d 还是init.d ?
其实就一点,当人们想获得相关信息的时候,有没有固定步骤一二三让大家得到相关信息。 花时间不怕,花完时间没结果才可怕。
get things done, 很难么?Long way to go, linux. 尽管我天天用linux, 还是五年内不推荐。