今天在网上看到了一篇写的很不错的文章,在这里做下记载。
问:池老师,我是个不爱互动的人,但是您所有的文章我都看了,非常感谢您的引导,我入手了人生第一台 MBP。现在问题来了,但是找不到更合适的人解答,只能求助于您了,如果您有时间的话。问题是这样的:我有个32bit unix file(开启一个服务进程),在 Mac 上执行时错误提示是:exec format error,但是在 Linux 服务器却可以执行,为何?Mac 上有可以运行的方案吗?期待您的回复,不胜感激。
答:Linux 和 OS X 是不同的操作系统,可以尝试在 OS X 里重新编译这个文件。
问:非常感谢!如果没有文件源码是不是就只能认命了?
答:可以在 Mac 上装 Docker,然后对服务进行端口映射就可以了。
答:茅塞顿开。谢池老师。
以上是我和一位读者的对话,这位小伙子在拿到答案之后像一缕烟尘一样消失无踪,之后再也没有出现过。
在微信上加了很多 MacTalk 的读者之后,经常会收到一些奇奇怪怪的问题,关于职场、关于选择、关于朋友、关于 Mac、关于技术等等,不一而足。但是我能回答的却很少。问题不好没法回答,问题太复杂没法回答,问题领域超出我的认知也没法回答,耗时太长的问题我也没 时间回答,实在是惭愧的紧。好在偶尔也能够帮助一些小伙伴解决一些实际问题,心理上略感安慰,比如上面这个问题。
把这段程序员之间的对话翻译一下,大致是这么个故事:
一位读者有一个32位的 Unix 可执行文件,可以在某种版本的 Linux 服务器上正常运行,运行这个文件作用就是起个进程,开端口,然后与其他程序进行交互。但是这个文件拿到 Mac 上完全没办法运行。就在他趴在 Mac 上愁肠百结万念俱灰的时候,突然想到了「池老师」。不就是这个老家伙把 Mac 夸的像一朵玫瑰一样,让每个程序员都去采摘么?现在扎手了,你不管谁管?于是他给我发来消息,意思就是管也得管,不管也得管,您看着办。
我拿到问题一看,不难。Linux 和 OS X 虽然师出同门,都是从老前辈 Unix 那儿毕业的,但是后来毕竟各练各的,在 Linux 编译好的程序不可能在 OS X 上用,但是在 OS X 上重新编译一下可能就没事了。我把这个想法告诉了这位程序员,得到的反馈是:对不起哥,没有源代码!
我被这个冷酷的回复震惊了,立刻意识到刚才的想法并 不是最优解决方案,因为在重新编译的过程中,各种包的依赖关系和编译错误足以让你焦头烂额,我随即提供了 B 计划:在 OS X 上安装 Docker,轻量级的容器 Docker 可以运行各种版本的 Linux,把文件扔到 Docker 里,然后通过主机和 Docker 之间的端口映射即可轻松解决这一问题。
虽然这里面会涉及很多技术细节,但是方向是没有问题的,所以这位程序员立刻表示「茅塞顿开」,然后「biu 」的一声就在屏幕对面消失了,没有留给我说「不客气」的机会。
这个问题装个 Linux 虚拟机也可以解决,但是虚拟机过于耗费资源,而且不如 Docker 灵活,所以不是最佳解决方案。Docker 是。
做为一个程序员,我们除了要掌握多门程序语言和多种 数据库,了解前端技术、后端技术,通晓网络七层架构,知道 TCP/IP三次握手和四次挥手,编写漂亮的代码,设计优美的架构……之外,我们还要解决研发、程序运行和产品上线过程中遇到的各种问题,而且被要求以最 小的代价来解决问题……我们容易吗?
除了编程技巧和程序设计能力,解决问题的稳准狠是衡 量一个程序员是否优秀的重要因素之一,也是资深技术人员真正的价值所在。在科技浪潮澎湃、技术信息扑面而来的今天,一位刚毕业的大学生如果足够勤奋,他可 以在两三个月之内掌握一门编程语言,并编写出像模像样的软件,他们的学习速度甚至超过了我们这些老程序员,但是解决问题的能力是无法速成的,只能依靠时 间、经验和惨痛的教训历练而成。有时候还需要灵感和运气。
很多军迷读了大量的军事著作和历史小说,常常羡慕那 些名将的风采,并浩叹自己「生不逢时」。但是名将不是那么容易炼成的。历史上叱诧风云的名将凤毛麟角,他们亲自持刀上阵追击敌人,见识战场的惨烈,目睹敌 人的尸体,看到战友被杀,知道被刀看中会流血死去,他们冷酷无情,坚如磐石,在全军即将崩溃的时候发现敌人的弱点并进行攻击,在瞬息万变的战场进行决断, 在多次失败后从无数士兵的尸体里站起来重新出发去挑战那个战胜你的对手,在所有人对你说「指导员,我们上吧」的时候,坚定的说出那三个字:再等等!
如果你做不到这些,那还是做个最终会被张飞枪挑的小兵吧。
优秀的程序员同样如此,菜鸟常常羡慕高手在谈笑之间 让难题灰飞烟灭,而自己却苦苦思索而不得入门之法,殊不知这些高手同样经历了名将的那些腥风血雨。他们在清晨的微光里编写代码,在轰鸣的机房中调试程序, 他们彻夜不眠就是为了解决一个 bug,他们要承受数据丢失或上线失败的痛苦,默默吞下眼泪,准备下一次的战斗。不停的学习、实践和思索,成千上万个小时之后,高手始成。
同样的问题,高手的解决思路和小球是截然不同的。一 般来说,只要不是世界难题,给足时间、空间和人力,都能解决。如果你遇到问题告诉上级,这个问题交给我了,两年之内搞的妥妥哒,那就不要怪项目组组团把你 打出翔来,因为大家要的是分分钟解决,不是两年。在这个唯快不破的年代,我们没有这么多的时间,所以要通过逆向思维、经验教训、辗转腾挪、借力打力等方式 以最小的代价快速解决问题。这才是老程序员的价值。
再举个例子,一个运行良好的线上应用在你修改 bug 增加功能之后重新上线出现了一些莫名其妙的问题,比如占用资源增加或运行一段时间宕机等等,怎么解决?
常规的做法就是通过阅读日志、模拟线上环境和调试程序来定位错误。容易的 bug 用这些方式基本就能搞定了,但是更隐蔽的 bug 会耗费大量的时间和人力。更好的方式是什么?
首先,排查是程序问题还是环境问题,把线上程序恢复到运行正常时的老版本,如果出现了同样的问题,那就是生产环境发生了改变。如果运行正常,要么是你修改老 bug 时引入了新 bug,要么是新增加的代码出现了问题。
其次,阅读产品的 changelog,根据代码提交的时间线构建系统,通过二分法排查,定位是哪部分代码引起的问题。
第三,排除了所有的不可能,剩下的无论看起来如何不可能,就是它干的。
以上只是一个简单的例子,实际的情况可能比这个例子复杂一百倍,需要我们综合使用各种方式进行交叉比对和错误排查才能解决。这仅仅是遇到问题解决问题,更多的时候是需要你提出问题,并解决问题,那是更高的境界。
很多人学了那么多编程语言,写了十几年程序,最终依然无法做到以最小的代价解决问题,不禁让人扼腕叹息。
程序员真正的价值是什么?以最小的代价解决问题!知行合一,方可无敌于天下。
相关推荐
文章不仅对程序员的各种层次进行了细致入化的划分,还鼓励每个从业者明确自己的目标与定位,追求属于自己的那份价值。 #### 八重境界详解 ##### 第一重:Bad Programmer - 糟糕透顶 **定义:**这一层指那些完全...
敏捷宣言中提出的四个核心价值观,个体和交互的重要性、可工作的软件、客户合作以及对变化的响应,都成为了敏捷开发中的基本原则。敏捷开发要求开发者们不仅关注产品本身,还要重视开发过程中的沟通和协作,确保团队...
它并非官方教材,但作为辅助学习的资源,可能提供了一种不同的解题思路或者更贴近实践的应用方式,对于自主学习者来说尤其有价值。 【标签】:“答案”和“黑马”这两个标签,分别代表了这份资料的核心内容和来源。...
最后,尽管这些模板提供了很好的起点,但每个程序员都应该根据自己的经历进行个性化调整,使其真正反映出自己的独特价值。记住,一份好的简历不仅仅是模板,更重要的是内容的质量和真实性。 总之,"30套精选程序员...
- 实践是检验学习成果的重要方式,只有将所学应用于实际项目中,才能真正理解和掌握知识。 - 学习过程中应避免单纯追求理论知识而忽视实践经验的积累。 - 例如,在学习SQL时,应该尝试使用SQL Server Management ...
《程序员必须走向专业化》这篇文章深入探讨了程序员如何通过专业化来提高自身价值和工作效率,以及专业化对于整个软件行业的意义。 #### 二、专业化的定义 文章提到,“专业软件工程师”是指具备规范化价值观和...
他提出,程序员应该像医生、律师等其他专业人士一样,通过不断积累专业知识和运用行业术语,来提高自己的职业地位和价值。这种专业文化的确立,不仅有助于区分专业人士与业余爱好者,还能促进整个行业的进步和提升...
历年试题的价值在于它们能反映出考试的常见题型和重点内容。通过解答这些题目,考生可以了解自己的强项和弱项,从而针对性地进行复习。同时,答案部分是必不可少的,它不仅可以验证考生的答案是否正确,还能提供解题...
然而,技术的深度和广度同样重要,没有扎实的技术基础,即使拥有丰富的知识,也无法真正提升工作效率和产品质量。 为了改善这种状况,程序员应该注重技术实践,通过编写实际项目来磨练技能。比如,参与开源项目、...
《程序员羊皮卷》作为一本聚焦于程序员职业生涯规划与发展的指南书籍,其核心价值在于为IT行业的从业者提供了从入行初期至成熟阶段的全方位指导。本书由CSDN《程序员》杂志创始人蒋涛倾力推荐,作者Leo(张大志)...
对于真正热爱编程的人来说,这是一个双赢的选择。兴趣是最好的老师,当激情与职业结合,不仅带来工作上的满足感,还能促使个人在专业领域深入发展,从而获得更好的职业回报。 综上所述,程序员是一个伟大的职业,...
首先,历年真题的价值在于它们反映了考试的实际内容和格式。通过研究这些真题,考生可以了解到程序员资格考试通常涉及哪些编程语言、数据结构、算法、操作系统、网络协议等核心知识点。例如,可能包含C++、Java或...
- **《C 语言名题精选百则 技巧篇》** - 冼镜光,机械工业出版社:书中汇集了大量技巧性编程技巧,对于追求效率的游戏程序员尤其有价值。 - **《计算机算法基础(第二版)》** - 佘祥宣等,华中科技大学出版社:...
理论知识固然重要,但只有通过实际项目来锻炼自己的能力才能成为一名真正的JAVA程序员。参与开源项目或自行创建小型应用都是提升技能的好方法。此外,熟悉版本控制工具如Git也很重要,它可以帮助团队协作更加高效。 ...
同时我发现我身边有一群同样怀揣梦想、追求更高更完善的自己的小伙伴,我真切的希望能和他们一起学习,一起工作,一起实现自我价值,为公司创造更大的价值。所以我就这五个月的工作情况向各位领导作个简要汇报,最后...
通过本刊调查,我们得以深入了解CMM/CMMI对中国软件行业的影响,以及如何避免“形式主义”的陷阱,真正提升软件开发的质量和效率。 ### 9. 微软产品发布推迟之谜 微软产品发布的延迟已成为常态,但背后的原因却...
理论知识固然重要,但没有足够的实践经验支持,很难将其转化为真正的生产力。因此,在学习新技术的同时,也要注重实际操作。可以通过参与实际项目、搭建个人作品集等方式来巩固所学知识,并逐步提升自己的实战能力。...