`
苳天里的一把火
  • 浏览: 12192 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一位技术大牛对新手的一点建议

阅读更多
今天给大家带来一个大牛的故事,希望给所有学习系统开发的人一点感悟。张生在一线做了十年的开发,经历了网易、百度、腾讯研究院、MIG 等几个地方,陆续做过 3D 游戏、2D 页游、浏览器、移动端翻译 app 等。
积累了一些感悟。必然有依然幼稚的地方,就当抛砖引玉,聊为笑谈。喜欢的朋友也可以留下企鹅,大家进一步交流,话不多说;


 



一、对于团队而言,流程太重要了


张生个人属于性格温和的(程序员大多性格不错),但确实见过少数强势的人,说很多强势的话。在技术上一言而决,一听到任何反对就上升到私人恩怨。这样的风格,到底是刚愎自用,还是胸有成竹,就需要仔细判断了。


为什么说流程重要呢?实际上,如果团队上有孙悟空存在,去西天取经,大概也不需要什么流程,只要方向就可以了。 但作为普通的战士,应该先虑败。找人算命时,应该先听听不好的地方,好的地方就不用听了,总归是好的,不好的地方一定要听,这样才能规避。


张生的态度:先悲观一点,划清底线,考虑在这个底线上你该怎么做?


这是张生做开发的一个习惯,但这个习惯肯定不适用于买房。怎么划清底线呢?就是假想团队中没有孙悟空了,光靠你唐玄奘、猪八戒和沙和尚,应该怎么去取经。


这个月走什么地方,遇到山怎么走,遇到河怎么过,遇到路上有妖怪劫道,谁去抵挡。遇到路上有少女要搭救,怎么办?这就是流程,是原则。


张生经历过一个流程很混乱的阶段。都是很多年前的事情了,可以拿出来说说,不涉及单个人。


2011年在百度浏览器团队时遇到几件让人影响深刻的事情。 有一次开会,产品拿出 Google 某个产品的 DEMO,里面有一段很酷炫 3D 效果,要求开发加上,只给2天时间,大家目瞪口呆。后续的开发为了赶节奏,导致非常多的 bug ,又为了修改 bug ,leader 将所有的 bug 按照人员平均分配,导致不同模块间的同学相互修改......实在难以想象。好比让做花卷的厨子,去修改西湖醋鱼的味道。


最初的现象是:bug下降的慢,延伸 bug 反而增加,每个人都累的半死,代码风格极其杂乱,为了赶工导致的临时方案层出不穷;


到了中期:人员离职越来也多,代码难以维护,新加的需求与之前的临时方案冲突。


到了后期:想做一些修复,想调整架构,又要保证正常运行,其难度好比在一架飞行的飞机上拆换零件。


然后他也急忙离职了......实在看不到成功的可能性。


后来到了腾讯的团队,感觉流程就规范多了。需求和 bug 有 Tapd 跟踪,产品发布按照节奏,需求提出前会和开发反复讨论可行性,有专门的质量跟踪,有专门的用户反馈,每天知道要做什么,也知道明天要做什么。有产品需求,也有开发需求!这个非常重要。很多团队,都是只有产品需求,开发好像牛一样,耕完地就不管了?


二、不要炫技,老老实实写代码


网上有一个段子,说有人要用JS实现一个简单的功能,然后朋友给他推荐了几十个库。


真的有必要吗?具体情况具体分析。


居家过日子,你只需要一套普通的工具就可以了;如果你是修车的,你需要一套修车的工具;如果你是光头强,你需要一台伐木机。 吃饭用筷子,用刀叉,都可以,但不要用杀猪刀,不要用丈八长矛!,当然也不能用牙签。


用什么工具,用什么库,问问过来人,多在KM上搜索一下。举个例子:android 上加密,用 SQLChpher就可以了,微信也在用,你当然可以学习;数据库 ORM 思想,用 KM 上推荐的 GreenDAO 就可以了;PC 上 3D 引擎,用OGRE就可以了;小型游戏 DEMO,用 Irrlicht 足够;写 WebGL,用 ThreeJS 足够。


首先想想:一些大库 hold 的住吗,后续发展如何?这些库对安装包的体积影响有多大?有没有调研过同样的产品在用什么?


想清楚了再决定用什么,最好是跟随成功项目的脚步。


三、架构上实用+适用


很喜欢曾国藩的一句话:结硬寨、打呆仗。


一字长蛇阵、八门金锁阵,哪个好?iOS 都是单个进程,微信 Android 版本3.5以前是单进程,3.5以后有独立的网络进程; PC 浏览器的进程架构更加复杂,UI 进程、内核进程、Render 进程,而且还有根据页面多少的进程调节模型。


这些设计都很好,各有各的道理,都适用于当前的产品。所以我的观点是:首先分析当前产品的规模、性质,然后再设计架构。


在当前阶段达到:开发效率+架构的平衡;并向后展望3个月,或者半年左右,看看架构能不能适应。




四、既要有攻城之力,也要有熬战之气——BUG


产品开发完成后,必然有 bug 。其实开发人员在工作过程中,是有一定的直觉或者心理预判的,即:某个功能模块的质量如何。 这里面的质量包括:可维护性、扩展性、算法\渲染效率,还有就是bug与崩溃率。


功能开发完成后,就要开始守城了。


bug,一部分产生是由于架构带来的,例如比较复杂的架构,会导致复杂的实现细节;


但还有很大部分bug,其实是基于如下三个原因产生的:


对于某个api的不了解,或者对于某个平台,或者 SDK 版本的不了解。 举例而言:android里面非主线程,是不能直接处理UI相关的事情的;JAVA 的内存释放也不是绝对的,相互指向是无法释放的;函数个数是有DEX问题制约的---------------------这些bug的产生,也是开发人员摸索学习的过程,经历过一次就不会再犯了。这是学习广度与熟练度的问题;


还有一些bug,是由于粗心大意导致的。例如空指针的问题,野指针的问题。在 C 的开发中,野指针的问题,GDI 句柄的释放问题,这些都是严谨的代码需要避免的; 而又一些工具,或者方法是可以规避这些问题的,例如 android中 的利用@ Nullable 和@ NonNull 加强空指针检测等方法;


还有一些bug,是由于“使用情况各异导致的”。例如:偶现在某个模块crash。这里的本质还是因为逻辑的异常边界没有处理好。例如 android 上的 OOM 问题,还有 PC 上 UI 焦点导致的对象释放问题。这些异常情况,一部分靠测试发现,一部分靠用户反馈,还有一部分就靠自己的异常处理。例如Android中的try catch机制,其实就是遇到异常了,你能纠正错误的机会。


 

五、自审


每过一段时间,都要站在高空俯视自己,问问:到底是在承担过去,还是在改变未来。如果你还处于迷茫期或者瓶颈期没有方向,这里可以留下企鹅,针对你的情况,我想做过过来人肯定能给你一个不错的建议和指引。

 

  • 大小: 23 KB
  • 大小: 52 KB
分享到:
评论
1 楼 苳天里的一把火 2018-03-07  
29—42--454...56,另外需要的朋友也可以留下自己的企鹅

相关推荐

    Kotlin从小白到大牛.rar

    《Kotlin从小白到大牛》是一本专为初学者设计的Kotlin编程语言学习指南。作者关东升以其丰富的教学...通过系统学习并实践书中的内容,你将能够熟练掌握 Kotlin,并将其应用于实际开发中,成为一位真正的 Kotlin 大牛。

    搜集的HZEE大牛的HDU代码

    【标题】"搜集的HZEE大牛的HDU代码"所蕴含的知识点主要集中在ACM(国际大学生程序设计竞赛)的编程实践中,其中HZEE大牛是一位在算法和编程领域有着深厚造诣的人物。他的代码集合是对于学习和提升算法能力的宝贵资源...

    PanDownload,一个大牛制作的下载工具

    此时,一款名为PanDownload的下载工具应运而生,它由一位技术大牛精心打造,旨在提供更快速、更便捷的下载体验,且永久免费,深受用户喜爱。 PanDownload的核心功能在于绕过常规的下载限制,让用户能够直接高速下载...

    思维篇|如何成为一个运营大牛

    如何系统性地成为一位运营大牛?请听我为您慢慢分享。互联网运营到底是做什么的?这可能很多人甚至是一些运营新手都不能回答完整的问题。文案篇篇10W+?活动场场爆满?社群用户活跃?又或者是大量有效流量?这些是一...

    FPGA.rar_fpga大牛

    《大话FPGA》这本书,由一位经验丰富的FPGA专家撰写,旨在引领读者深入理解并掌握FPGA(Field-Programmable Gate Array)的设计与应用。FPGA是一种可编程逻辑器件,其灵活性和高性能使其在电子设计领域备受青睐,...

    国外大牛cherno的vs设置文件

    【标题】"国外大牛cherno的vs设置文件"指的是知名编程教育者Cherno的Visual Studio(VS)个性化配置文件。Cherno,全名Yahor Chernenok,是一位在YouTube上广受欢迎的计算机科学教育者,他通过一系列教学视频分享了...

    【菜鸟作品】【手机游戏】是男人就撑20秒

    “菜鸟作品,大牛见谅”是对游戏质量的一种谦逊表达,暗示开发者认识到他们的技能水平还有待提高,并期待经验丰富的开发者或玩家能理解并接受这一点。对于新手开发者来说,发布这样的作品是一个重要的学习步骤,通过...

    贪心导论.pdf

    曾经有位大牛写过一篇《骗分导论》 ,我很喜欢。在我看来,贪心就是一种高水平的骗分技术。 “有技 术,一等奖也贪得来” ,这就是我的信仰。 还有人说: “贪心很困难。 ”正因如此,今天,我写下这篇《贪心导论》...

    很牛叉的一个画图软件

    综上所述,这个“很牛叉”的画图软件可能是一个高度定制化、功能全面的流线图绘制工具,由一位独立开发者精心打造,旨在满足专业人士和业余爱好者绘制高质量流线图的需求。其内置的打印功能和可能的API扩展性都是其...

    牛族多功能ASCII转换工具

    在信息技术领域,ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种基于拉丁字母的一套电脑编码系统,最初被设计为7位的字符集,包含了128个不同的字符,包括大小写字母、...

    RSA2-3.rar(基于C语言的RSA算法实现,自己实验版本,小白参考,大牛勿喷)

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字首字母而得名。该算法在信息安全领域广泛应用,如数字签名、数据加密等,是网络通信中安全传输的重要...

    CVAVR2.05石皮角刀牛,win7 64位也能用

    而“CVAVR 2.0.5”就是这样一款为开发者量身打造的软件,尤其对那些使用Win7 64位操作系统的用户而言,它无疑是雪中送炭。 CVAVR(C语言编程环境 for AVR)是一款专业级的AVR微控制器编程工具,其2.0.5版本是针对...

    单片机处理工具非常不错的牛

    ISP则代表In-System Programming,即在系统编程,这是一种无需从电路板上取下单片机即可对其编程的技术,大大简化了开发过程。而“单片”和“embedded”分别指单片集成电路和嵌入式系统,进一步确认了这个工具是针对...

    史上最牛的五笔输入法

    总的来说,《史上最牛的五笔输入法》是一款集易用性、智能化、高效性于一体的输入工具,无论是对于专业打字员还是普通用户,都能极大地提高汉字输入的效率和准确性,降低输入错误率。通过安装并熟练使用这款输入法,...

    Linux教程第四版孟庆昌牛欣源

    《Linux教程第四版》是由孟庆昌和牛欣源两位专家编著的,旨在为学习者提供一套完整的Linux操作系统知识体系。此教程是电子工业出版社出版的,包含了一系列的PPT教案和习题答案,覆盖了Linux操作系统的各个方面,旨在...

    java语法详解新手必备_java语法详解_

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性著称。Java语法是学习Java编程的基础,对于新手来说,理解并掌握这些基本概念至关重要。以下是对Java语法的详细讲解: 1. **变量与数据类型**...

    软件项目中需求调研浅析

    如果你是一位需求调研的“新手菜鸟”,那么可以看看本文,也许会对你的第一次需求调研有些许帮助!如果你是一位需求调研的“大牛”,也可以看看本文,为小弟指点迷津!由于我也是第一次参加项目的需求调研,所以在去...

    eclipse oxygen 64位

    Eclipse Oxygen是Eclipse IDE(集成开发环境)的一个重要版本,专为64位操作系统设计。Eclipse是一款广泛使用的开源开发工具,尤其在Java开发者中非常流行,但也支持其他编程语言如C++、Python和PHP等。Oxygen版本...

Global site tag (gtag.js) - Google Analytics