Windows程序员如何转向Linux开发应用?

做十年Windows跟十年linux的程序员差距有多大 如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。 我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受, 我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC++,当时用的是VC6.0, 做windows下面的开发5年后转入linux下面做开发的,开始在linu 阅读详情

Windows程序员如何转向Linux开发应用?

这是一封发到邮箱里面的邮件,感觉有点代表性,这里做个统一回答,一家之言哈,欢迎拍砖。

原文如下:

我从csdn学习大本营得到您的信息。不好意思打搅您。

我现在用c++在linux下开发大型应用程序。我想请教是否值得深入学习linux kernel。

我没有特别多的时间。另外我有多年Windows下开发应用程序的经验。

 

我的回答:

呵呵,我感觉这还是一个学习方向的问题。

Linux这几年,发展越来越好了,至少在很多应用服务器市场,Linux已经取代Windows成为第一选择,另外,在嵌入式环境,Linux也是逐渐成为主流。这导致很多原本是Windows的程序员,由于工作需要,逐渐走向Linux开发,这中间当然涉及到一个学习的问题。我本人也算其中一份子吧。

我本来一直做Windows开发,在这之前,在DOS下用过gcc开发,还翻译了djgpp的库函数手册,也算有点基础。不过,在07年公司安排我在Linux下正式开发商用服务器的时候,我心里还是很打鼓的。因为也面临着一个学习的问题。

看看市场上的书籍,很乱,我当时花了一整天在汉唐书城,仔细分析Linux开发相关的书籍,我发现分几种,首先是shell编程,这个我看了有半个小时,就觉得没用,这貌似给网管员用的,我做传输服务器用不到,连带着,正则表达式,我觉得对我用处也不大。真的要做复杂条件筛选,我的习惯是写个词法分析程序,自己来分析,也花不了多少时间,所以,我一直就没学正则表达式,呵呵。

然后是C和C++编程相关,我仔细看了,发现一说到开发,就讲到Linux kernel,这部分显然是操作系统的知识,我仔细想了想,发现自己的问题并没有得到解决。就算我知道了kernel怎么工作,里面有什么开发技巧,对我的工作并没有什么帮助。

我当时做的是分布式数据库的传输服务器部分,这部分讲究多线程,高效能,但还是局限在应用层,并没有多少涉及到kernel的东东。我觉得用处不大。

反而我觉得我有必要对socket编程重新补一补了。经过挑选,我给自己选了一本《UNIX网络编程》的第1卷网络通信篇,第2卷是进程间通讯,我觉得我的程序用多线程跑已经很好了,线程本身就是共享内存的,无需考虑太多异步通讯,而且,我的习惯,进程间通讯,一般直接使用socket,这个放之四海皆真理,而且,好处是我的进程可以跨机器随意部署,只要我提供IP地址,进程间就可以互相通信,协同工作。所以,我只买了第1卷,就是专门讲socket的,这是好书,我现在没事还要拿出来看一看。

另外,我又给自己挑了一本《Unix编程艺术》,这本也是好书,我以前就发现,Dos程序员有Dos程序员的习惯,Windows的有Windows的习惯,这些方言,习惯,教科书是没有的,必须找有经验的程序员问,而这本书恰好就是专门讲这些问题的。比如DOS时代,硬盘通常很小,用户分盘又很乱,我们要是想向磁盘存个临时文件,最好找C盘,连D盘都是很多计算机没有的。而Windows下系统提供了服务,可以通过api查询系统临时文件目录,就好多了,而Linux下呢,是约定俗成,大家都用/var来做临时目录,这就是风俗。

嗯,这本书我看了以后,遵守了一半,呵呵,也没全遵守,它强调程序都是过滤器,从信息流中过滤自己有用的信息,加以处理,但是,不准破坏信息流,并且强调信息流无缝流转到下家,这个我很同意,这也是我这几年逐渐领悟到的一个程序设计原则。不过,它强调搭积木我就不太同意了,Unix的程序员,有个坏习惯,对管道很滥用,这就造成了很多程序都是小程序,通过管道勾搭到一起,完成一个强大的功能,这个呢,见仁见智,在某些场合合用,但我的开发领域,我强调强大的系统分析能力,一体化的系统设计思考,强调从系统设计阶段就杜绝很多潜在的逻辑bug,简单说,我对系统各个模块之间的和谐性看得很重,因此,这条我就没有遵守。

嗯,还有就是它强调简洁开发,我呢,也只同意一半,把程序写简洁,每个函数,每个类,都很简单,减少bug,这个我是同意的,不过,简介到变量名函数名都净是缩写,人都看不懂,就太离谱了。

呵呵,我的习惯就这样,别人的东西好,对我有用,我就用,我觉得有异议,并且认为自己的理由更站得住脚,我就坚持自己的。并且,一切从实践中看,计算机是最公平的,乱写程序,就算是大师也照挂,小心翼翼地写程序,即使是刚入行的小弟,也能写出很漂亮的程序。

就这样,我借着这两本书慢慢看,然后,大多数习惯还是Windows的,到现在我开发,都是VC下编辑程序,然后写个makefile,ftp到虚拟机去编译执行,也走到今天了。

后来发现,我没有学习shell,我没有学习kernel,我没有学习很多教科书上规定必须学习的东东,我的程序居然也完成了,我们的工程在去年,9轮测试,只发现51个bug,属于C和C++这边的bug,只有7个,这就是我坚持我自己无错化程序设计方法的威力。

当然,这中间也学了一点很重要的东东,Windows和Linux,在锁、线程、socket访问这几个点上差别很大,毕竟是两种系统,库都不一样,我这里着重做了一些学习和开发,设计了一套跨平台工程库,然后就解决了问题。

至于多任务开发,这方面本来就是我的强项,我自己的内存池、线程池和任务池,再配合跨平台库,基本上就无缝转换了,呵呵,又有多大的问题?

后来还有个后话,某一天我自己买了块arm,装了嵌入式Linux操作系统,把我的程序放过去,就改了一点,把线程池300条线程预备限额改为30条,马上就可以运行了,顺利得出乎我的意料。

所以,根据我的经验,其实Windows程序员转Linux没多难的。把住我上面说的几点,坚持自己正确的方法,尊重对方的方言习惯,跨平台开发,其实很easy。

嗯,我的新书《0 Bug -- C/C++商用工程之道》,其实主要就是讲解我的这些理解的,里面的内容包括商用系统开发思维,无错化程序设计方法,跨平台工程库,内存池,锁论,线程池,任务池等,尤其是对于时间片的理解,对于多线程的并行程序开发,我分享了很多自己的实战经验,你的问题,在我的书里基本上都是现成的答案。

这本书由电子工业出版社出版,预计11月份面世,等书出来,建议买本来看看。不贵的,我考虑到大家经济压力别太大,已经让出版社尽量压低成本,不要把书做得太贵。

肖舸

MacX DVD Ripper Pro for Mac(DVD解码器) 6.2.120190416免激活版 只需要5分钟即可转档一张DVD光碟!并允许我们在编码之前预览、编辑、裁剪、修剪或扩展视频。第一款也是唯一一款能够支持DVD到MP4,H.264,MOV,FLV,MPEG4等所有格式DVD(新DVD,99-标题DVD,损坏和无法播放的DVD)和翻录DVD / ISO映像的工具,AVI,QT,MP3等。借助350多种预设配置文件MacX DVD Ripper Pro for Mac(DVD解码器) 6... 阅读详情

相关推荐

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1055

windows程序如何转linux开发

如果原来的程序使用了Windows下的GUI界面,那么需要将GUI界面重新设计和实现,因为Windows和Linux下的GUI界面是不同的,不能直接进行迁移。以上建议可能可以帮助您更快地进行转换。Windows程序可能依赖于Windows下的一些系统库或第三方库,这些库在Linux下可能不存在或者版本不同,需要根据实际情况进行相应的修改或替换。首先需要考虑的是,原来的Windows程序使用的编程语言和库是否支持Linux平台,如果不支持,则需要进行代码调整或者替换相应的库。使用跨平台的工具和语言。

zhangzhechun的专栏 4249

STM32F4_LCD显示汉字

LCD显示汉字和显示图片、数字、字符的原理是一样的,都是将汉字、图片、数字以及字符转换点阵,进而通过函数扫描点阵在LCD上显示;

light_2025的博客 1万+

完全使用Linux替换Windows之后,我觉得自己非常愚蠢

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,非公众号转载保留此声明。曾经,我有一万种理由使用Linux,但如今的我,只觉得自己非常的愚蠢。技术文章不是推理小说,没必要把原因搞的这么扑朔迷离,但我就是觉得自己非常愚蠢。我痛苦的想要把自己的头拧下来。很长一段时间里,我使用的是Linux,刚开始接触的就是RedHat Linux。因为比较穷,电脑配置差,所以4MB的内存,Windows根...

小姐姐味道 2111

Stable Diffusion跑图总爆显存?别急着换显卡,试试这个PYTORCH_CUDA_ALLOC_CONF参数调优

本文深入解析了Stable Diffusion运行中常见的显存不足问题,特别是由显存碎片化导致的假性OOM现象。通过详细讲解PYTORCH_CUDA_ALLOC_CONF参数中的max_split_size_mb设置技巧,提供了一套完整的显存优化方案,帮助用户在无需升级硬件的情况下显著提升AI绘画的稳定性与效率。

weixin_42524100的博客 347

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 617

window系统改为Linux系统

windows系统改为Linux系统全教程

安徒生的博客 1万+

基于PLC的矿用排水控制系统设计【附代码】

(3)矿用排水控制系统的软件设计 研究设计了矿用排水控制系统的软件,包括PLC程序的编写和上位机监控画面的设计。(2)矿用排水控制系统的硬件设计 研究对矿用排水控制系统的硬件进行了选型和设计,包括矿用多级耐磨离心泵、三相异步防爆电机等执行设备的选型,以及控制系统所需用到的各类型传感器、PLC的I/O点分配及选型。(1)矿用排水控制系统的现状分析 研究首先对矿井排水系统的现状进行了分析,指出了现有系统存在的问题,如自动化程度低、劳动强度大、设备维护困难等。✅ 具体问题可以私信或查看文章底部二维码。

lagougongzuoshi的博客 1173

Windows程序员转型Linux入手指南:WSL为核心的低成本迁移方案

摘要:本文系统介绍了Windows开发者如何通过WSL等技术栈实现Linux开发的无缝迁移。从WSL2的快速部署(0.5秒启动)、命令行精要对比,到开发环境配置(VSCode、Qt)、文件传输方案,以及性能优化技巧(.wslconfig配置)。文章重点解析了90%云工作负载基于Linux的现实需求,提供跨平台构建脚本示例和常见问题解决方案,并推荐持续学习路径。通过WSL这一技术望远镜,开发者可在保留Windows舒适区的同时,掌握现代云计算、容器化等必备技能,实现

qq_30377315的博客 1369

【抖音】a_bogus参数逆向分析

点击——展开xxx条回复﹀就会出现。可以看到这个栈是有请求相关的数据的。所以就是在bdms.js里面生成的。

qq_44990881的博客 3000

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 48

windows程序员如何转linux,为什么优秀的程序员都不乐意用windows作开发环境?

最近因为工作关系,需要在windows机器上工作一段时间,作为一个用了多年windows,然后切换到ubuntu作为工作环境两年时间,然后切换到mac大概3年多时间只到最近被迫用回windows的程序员,我大概有自己的一些感触。当然,如果你碰巧用了微软的技术栈,或者在开发windows平台应用或者是windowsphone应用,很遗憾,你没什么太多选择。如今我写的程序主要是web居多,移动的以iO...

weixin_39585886的博客 369

手把手教你玩转RISC-V指令集​​​专栏--​​1.2 对比x86/ARM:RISC-V的三大核心优势(开放、灵活、可扩展)​

​:RISC-V以“开放打破垄断、灵活适配场景、扩展定义未来”的三大优势,正在重塑计算架构格局。其核心价值不仅是技术革新,更是对全球半导体产业链话语权的重新分配。

amy_mhd的博客 130

新人千万不要在 Windows 上使用 Ruby on Rails

分享 ? ery ? 于1年前发布 ? 最后由 ericguo 于2月前回复 ? 7186次阅读 标题:新人千万不要在 Windows 上使用 Ruby on Rails 副标题:鼓励新人在 Linux 和 Mac 上使用 Ruby on Rails ! 原则:要走寻常路,不要学美特斯邦伟! "在 Windows上 使用 Ruby on Rails "是个坑, 跳进去, 你...

weixin_33893473的博客 105

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

完了!Windows弱爆了!它才是程序员的首选!程序员:真的好用!

最近有很多程序员在优快云博客发帖讨论:用Windows还是Linux? 关于这个问题,其实答案很简单:做开发首选Linux。 如果一个程序员从来没有在Linux上开发过程序, 一直在Windows上面开发程序,同样是工作5年,在Linux上开发5年的程序员,会比在其他系统上开发的厉害很多! 而且如果你经常看招聘信息,不难发现,几乎超过90%的技术岗都需要会Linux,已经成了面试的必问题!...

优快云学习 3万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

做10年Windows程序员与做10年Linux程序员的区别_linux 开发

linux下的内核API, 全部算下来也才335,但是这些内核的API只有编写驱动的时候才能用到, 开发应用程序基本用不到内核的API,开发应用程序的API基本都是C的API,而 Linux所有的C的API个数是279个, 也就是说你只需要掌握不到300个的API, 就可以顺利的在linux下面开发应用程序了,相比学习windows下面的那一堆API来说, 你是不是可以省下很多时间来学习其他知识呢?上面这些API是windows下面对文件操作的API, 总共是8个,看看CreateFile的参数吧,

2501_90433508的博客 670

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

程序员如何选择操作系统 Mac、Windows还是Linux

在他们的第一份正式工作中,被分配了一台Windows电脑,接触到了Java和Oracle等技术,同时为一家失败的财富500强公司做着无聊的网站开发工作。他们找到了自由,买了一台全新的MacBook Pro,开始在各地的星巴克间穿梭,开发Ruby on Rails应用。而打开那台崭新的MacBook,表面上看似美好,但实际上是无意识地加入了“苹果教派”,一个充满专有锁定和限制的世界。幸运的是,JetBrains提供了完美的工具集,他们的IDE帮助程序员加速了工作流程,AI工具更是锦上添花。

Niki2020_2017的博客 1572

程序员开发windows linux,好程序员不用windows作开发环境

好程序员不用windows作为开发环境,今天我想就这个点吐槽一下。最近因为工作关系,需要在windows机器上工作一段时间,作为一个用了多年windows,然后切换到ubuntu作为工作环境两年时间,然后切换到mac大概3年多时间只到最近被迫用回windows的程序员,我大概有自己的一些感触。当然,如果你碰巧用了微软的技术栈,或者在开发windows平台应用或者是windows phone应用,很...

weixin_39860064的博客 332

用了 10 年 Windows 后,我最终转向 Linux

点击“开发者技术前线”,选择“星标????”让一部分开发者看到未来英文:Shalitha Suranga,翻译:InfoQ -张健欣我是 Windows 98、2000、XP、7 和...

开发者技术前线-DevolperFront 219

Windows弱爆了!Linux才是程序员的首选!真的好用!

最近有很多程序员在优快云博客发帖讨论:用Windows还是Linux? 关于这个问题,其实答案很简单:程序员首选Linux。 如果一个程序员从来没有在Linux上开发过程序, 一直使用Windows或者Mac,同样是工作3年,使用Linux的程序员,会比使用系统做开发的厉害很多! 想学linux点这里!超低价课程任你选! 原因如下: 1)Linux是开源的:相比Windows有着非常多...

优快云学习 2596

程序员windows linux,程序员看Linux和windows的对比

本人在Unix SYS5,DOS,Windows3.x,windows9.x/NT 和Linux几个不同时期流行的OS上写过程序.在Linux和windows的对比中,我主要是从一个程序员的角度来看的。一 系统架构的对比1 内核(1) 内核的弹性Linux的内核表现出了高度的可配置性和独立性,主要是完成:IO驱动设备管理,TCP/IP,以及任务调度.Linux的标准内核发布版本有40~50MB,而...

weixin_39863155的博客 481

做10年Windows程序员与做10年Linux程序员的区别

如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受,我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC...

小白的逆袭 583

windows程序员C/C++转向linux程序员时,如何编写、调试linux程序

windows的C/C++程序员转到linux下面,面对的是不怎么友好的IDE及调试环境,非常的苦恼,本文说明了常见的调试方法,最后介绍了使用vs+visualgdb的方法在windows下方便的调试linux程序,使windows程序转向linux程序开发较为平缓。

ytfrdfiw的专栏 2353

慎论程序员对windows和linux的争论!

其实在windows下写程序尤其是多线程的程序是一件很幸福的事情。多数程序只需要一个断点一个trace或者一个printf函数就可以找到程序的bug。你如果问我那两个函数有什么不同,我只能告诉你那只是程序员调试程序的风格和个人喜好的区别。在linux上写 程序的兄弟就没这么幸运了。他们要自己写调试信息函数。像什么出错行数信息打印Printf(%d, __FILE__);我就旁边就是几个linux程

Savage54321.Thought.ToString(); 2766
上一篇: C/C++招聘的一些感受和经验
下一篇: 阿彤评 《许冬亮:三年从大学生到百度科学家 》
PerfectToday
博客等级 码龄18年 46粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值