在科技浪潮汹涌、技能信息扑面而来的今日,一位刚结业的大学生假如满足勤勉,他能够在两三个月之内把握一门编程言语,并编写出像模像样的软件,他们的学习速度乃至超过了老一辈的程序员,可是处理问题的才干是无法速成的,只能依托时刻、阅历和沉痛的阅历历练而成。有时分还需求创意和命运。
“问:池教师,我是个不爱互动的人,可是您一切的文章我都看了,十分感谢您的引导,我下手了人生第一台MBP。现在问题来了,可是找不到更适宜的人答复,只能求助于您了,假如您有时刻的话。问题是这样的:我有个32bitunixfile(敞开一个服务进程),在Mac上履行时过错提示是:execformaterror,可是在Linux服务器却能够履行,为何?Mac上有能够运转的方案吗?等待您的回复,不胜感激。
答:Linux和OSX是不同的操作体系,能够测验在OSX里从头编译这个文件。
问:十分感谢!假如没有文件源码是不是就只能认命了?
答:能够在Mac上装Docker,然后对服务进行端口映射就能够了。
答:恍然大悟。谢池教师。”
以上是我和一位读者的对话,这位小伙子在拿到答案之后像一缕烟尘相同消失无踪,之后再也没有呈现过。
在微信上加了许多MacTalk的读者之后,常常会收到一些奇奇怪怪的问题,关于职场、关于挑选、关于朋友、关于Mac、关于技能等等,不胜枚举。可是我能答复的却很少。问题欠好无法答复,问题太杂乱无法答复,问题范畴超出我的认知也无法答复,耗时太长的问题我也没时刻答复,实在是羞愧的紧。好在偶然也能够协助一些小伙伴处理一些实践问题,心思上略感安慰,比方上面这个问题。
把这段程序员之间的对话翻译一下,大致是这么个故事:
一位读者有一个32位的Unix可履行文件,能够在某种版别的Linux服务器上正常运转,运转这个文件效果便是起个进程,开端口,然后与其他程序进行交互。可是这个文件拿到Mac上彻底没办法运转。就在他趴在Mac上愁肠百结万念俱灰的时分,忽然想到了「池教师」。不便是这个老家伙把Mac夸的像一朵玫瑰相同,让每个程序员都去采摘么?现在扎手了,你不论谁管?所以他给我发来音讯,意思便是管也得管,不论也得管,您看着办。
我拿到问题一看,不难。Linux和OSX尽管师出同门,都是从老前辈Unix那儿结业的,可是后来究竟各练各的,在Linux编译好的程序不行能在OSX上用,可是在OSX上从头编译一下或许就没事了。我把这个主意告知了这位程序员,得到的反应是:对不住哥,没有源代码!
我被这个冷漠的回复震动了,马上意识到方才的主意并不是最优处理方案,由于在从头编译的过程中,各种包的依托联系和编译过错足以让你焦头烂额,我随即供给了B方案:在OSX上装置Docker,轻量级的容器Docker能够运转各种版别的Linux,把文件扔到Docker里,然后经过主机和Docker之间的端口映射即可轻松处理这一问题。
尽管这儿面会触及许多技能细节,可是方向是没有问题的,所以这位程序员马上表明「恍然大悟」,然后「biu」的一声就在屏幕对面消失了,没有留给我说「不客气」的时机。
这个问题装个Linux虚拟机也能够处理,可是虚拟机过于消耗资源,并且不如Docker灵敏,所以不是最佳处理方案。Docker是。
做为一个程序员,咱们除了要把握多门程序言语和多种数据库,了解前端技能、后端技能,知晓网络七层架构,知道TCP/IP三次握手和四次挥手,编写美丽的代码,规划美丽的架构……之外,咱们还要处理研制、程序运转和产品上线过程中遇到的各种问题,并且被要求以最小的价值来处理问题……咱们简略吗?
除了编程技巧和程序规划才干,处理问题的稳准狠是衡量一个程序员是否优异的重要因素之一,也是资深技能人员真实的价值地点。在科技浪潮汹涌、技能信息扑面而来的今日,一位刚结业的大学生假如满足勤勉,他能够在两三个月之内把握一门编程言语,并编写出像模像样的软件,他们的学习速度乃至超过了咱们这些老程序员,可是处理问题的才干是无法速成的,只能依托时刻、阅历和沉痛的阅历历练而成。有时分还需求创意和命运。
许多军迷读了很多的军事著作和历史小说,常常仰慕那些名将的风貌,并长叹自己「生不逢时」。可是名将不是那么简略炼成的。历史上叱诧风云的名将百里挑一,他们亲身持刀上阵追击敌人,才智战场的惨烈,目击敌人的尸身,看到战友被杀,知道被刀看中会流血死去,他们冷漠无情,安如磐石,在三军行将溃散的时分发现敌人的缺点并进行进犯,在瞬息万变的战场进行决断,在屡次失利后从很多战士的尸身里站起来从头出发去应战那个打败你的对手,在一切人对你说「指导员,咱们上吧」的时分,坚决的说出那三个字:再等等!
假如你做不到这些,那仍是做个终究会被张飞枪挑的小兵吧。
优异的程序员相同如此,菜鸟常常仰慕高手在谈笑之间让难题灰飞烟灭,而自己却苦苦思索而不得入门之法,殊不知这些高手相同阅历了名将的那些凄风苦雨。他们在清晨的微光里编写代码,在轰鸣的机房中调试程序,他们彻夜不眠便是为了处理一个bug,他们要接受数据丢掉或上线失利的苦楚,静静吞下眼泪,预备下一次的战役。不断的学习、实践和思索,不计其数个小时之后,高手始成。
相同的问题,高手的处理思路和小球是天壤之别的。一般来说,只需不是国际难题,给足时刻、空间和人力,都能处理。假如你遇到问题告知上级,这个问题交给我了,两年之内搞的妥妥哒,那就不要怪项目组组团把你打出翔来,由于咱们要的是分分钟处理,不是两年。在这个唯快不破的时代,咱们没有这么多的时刻,所以要经过逆向思想、阅历阅历、曲折腾挪、借力打力等方法以最小的价值快速处理问题。这才是老程序员的价值。
再举个比方,一个运转杰出的线上运用在你修正bug添加功用之后从头上线呈现了一些不可思议的问题,比方占用资源添加或运转一段时刻宕机等等,怎样处理?
惯例的做法便是经过阅览日志、模仿线上环境和调试程序来定位过错。简略的bug用这些方法根本就能搞定了,可是更荫蔽的bug会消耗很多的时刻和人力。更好的方法是什么?
首要,排查是程序问题仍是环境问题,把线上程序康复到运转正常时的老版别,假如呈现了相同的问题,那便是出产环境发生了改动。假如运转正常,要么是你修正老bug时引入了新bug,要么是新添加的代码呈现了问题。
其次,阅览产品的changelog,依据代码提交的时刻线构建体系,经过二分法排查,定位是哪部分代码引起的问题。
第三,排除了一切的不行能,剩余的不管看起来怎么不行能,便是它干的。
以上仅仅一个简略的比方,实践的状况或许比这个比方杂乱一百倍,需求咱们归纳运用各种方法进行穿插比对和过错排查才干处理。这仅仅是遇到问题处理问题,更多的时分是需求你提出问题,并处理问题,那是更高的境地。
许多人学了那么多编程言语,写了十几年程序,终究仍然无法做到以最小的价值处理问题,不由让人扼腕叹息。
程序员真实的价值是什么?以最小的价值处理问题!知行合一,方可无敌于天下。