百度在职 iOS 架构师的成长笔记,送给还在迷茫的你!
前言
我们经常在网上会看到这样的文章,你的同龄人正在如何如何......。这是典型的贩卖焦虑的文章。的确,现阶段,刚毕业几年的年轻人,面临车,房子等,有时候压力挺大的。
但你过度焦虑的话,每天生活在恐慌当中,你会发现你生活过得一团糟。对比一下,很多国家的底层平民,典型如印度,一点不焦虑,乐天知命,反正永远上升不了,得过且过。所以,适度的焦虑也许是成长的代价,我们要把握好一个度。
有时候,我也经常在想,到了30 多岁,我自己会是怎样的?是继续奋斗在一线写代码,还是做技术架构,或者转行,创业等等。说句实话,我现在也是一脸懵逼,未来是怎样的,我也不确定。但有一点可以确定的,我一直在追求更完美的自己,提高自己的核心竞争力。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
今天,站在我的角度,一起来聊聊职场技术人的成长历程。在我看来,以下几个方面尤为重要。
自学能力
复盘总结能力
技术素养
自学能力
刚开始实习的时候,以为工作了,技术就可以突飞猛进,因为想着有人带了。等到工作了,才发现还是 too young,too simple。
在工作中,遇到不懂得,90% 的问题需要你自己解决的。相信工作中的人都深有体会,第一:同事也有自己的任务需要完成,不可能你一碰到问题,就想着会有人帮你解决。第二:工作中,每个人都会有自己的分工,有时候遇到的问题,往往是特定场景的问题,如果之前没有遇到过,一时之间也很难帮你解决。顶多提供一种思路。
因此,自学能力真的很重要。具体来说,表现在以下几点。
第一:善用搜索引擎
说句实话,技术遇到的问题,只要不是最新的,80% 的问题都可以通过搜索引擎找到相应的解决方案。记得,我刚入职场的时候,有一段时间,遇到问题的时候,第一时间总会问身边的同事有没有遇到这样的问题。等他们比较空闲的时候,一般会跟你讲解,忙的时候,也是叫你去百度或者 google 搜一下。
当然,搜索的话也有一些技巧。这里就不展开说了,建议大家多用 Google,Github,StackFlow。
第二:学会举一反三
平时工作中遇到的难题,不要仅仅停留在表面,要通过现象去分析背后的原因。比如说,开发的时候遇到滑动冲突,通过搜索引擎在网上找到相应的解决方案了。这是第一步,但还不够,我们不仅要知道解决方案,更重要的是要了解为什么要这样解决?有没有更好的解决方案。
如果我们仅仅停留在抄的层面上,bug 稍微变化一下,下次你还是解决不了。因为工作中遇到的 bug 总是千奇百怪的,但十之八九,掌握了原理,解决思路都是差不多的。
第三: 形成自己一套解决问题的思路
解决问题的思路,这个跟工作经验有一定的关联。资深的工程师,遇到问题的时候,对比普通的工程师,往往能较快定位到问题根源。这跟个人的积累和经验有空,一时之间很难找到适当的例子说明。也许这就是只可意会,不可言传吧。
那我们平时开发中遇到的 bug,你的解决思路一般是怎样的?
这种一般分几种类型的 bug。第一: crash 的话一般比较容易解决,一般从堆栈可以看出信息,再结合代码或者搜索引擎可以定位到问题。
第二种:逻辑错误的 bug。这种类型的 bug,我们要先定位到大概的代码,再结合 log,看是哪里出错了。但有时候,用户反馈回来的 bug,往往不是不是必现的,是偶现的。这时候,就需要一步步分析了。
复盘总结能力
总结对于每一个人来说都非常重要,这点是毋庸置疑的。
相信大家也经常遇到这样的场景。
这种类型的 bug 我以前遇到过,但一时半会不知道怎么解决了。
我以前明明是这样写的,没问题啊。
这种功能我以前做过,找了半天,找不到以前的代码了。
刚开始实习的时候,这种情况我经常发生。仔细想来,一般有以下原因。
第一:人的记忆性是有限的,不可能记住所有的东西
第二:没有及时总结
还记得这句俗话吗?好记性不如烂笔头。平时我们看文章,或者跟别人探讨,觉得某些观点挺正确的。但事后就是想不起来,这是为什么呢?这是因为我们只停留在表层,没有真正转化为自己内在的东西。你记性好,当时记住了。但你能保证十天,一个月,一年之后,你还记得住吗?
做笔记的难得之处,是你的思考过程。当你着手记笔记的时候,你的大脑在思考,我要怎样用简短通俗的语言记录下来。这在无形之中加深了你的印象。一段时间后,即使你忘记了,但当你回看以前的笔记的时候,我们往往会吸收地很快。
当然,我也不赞同一味地死记硬背。生活中的琐事那么多,不可能事事都记录下来。挑选那些你觉得重要的,有感触的即可。
那可能有部分问就会问了,什么是重要的?这里我发表以下我的看法。
开发中需要经常用到的。这些你肯定需要记住,不可能说每一次你需要用到,再去搜索,这样效率多低。
第二,一些疑难杂症。针对某些特定场景的 bug 或者需要注意的。
人的一生也是一样,是一连串的故事组成的。我们的一生,究其到底,不过是所有经历事情的总和。我们的昨天和今天,决定了我们的明天。就像种瓜得瓜种豆得豆一样。
我们有时候就是有这样的一种错误,觉得今的事情不用总结,以后需要用到的时候,以前所有的认知会自然而然得回来。这是,这只是我们找的一个借口,为自己的懒惰的一个借口。其实我们心里明白,今天的总结会对明天有着莫大的帮助,但是懒惰总能战胜我们的理性。
技术素养
前面这两步做好了,在所在的技术领域专心工作几年,不敢说你成为一名技术大神,但至少成为一名高级,资深工程师。
什么是技术素养呢?
在我看来,包括以下几个方面。
第一方面:技术深度和技术广度。
作为一名技术人,技术还是最重要的。它是我们的专业技能,也是我们谋生的重要技术。
技术深度,简单来说就是你在技术领域的钻研程度。假设有 A,B,C,D 四个领域,我们在 A 领域有很深的钻研和造诣,碰到 A 领域的疑难杂症,我们基本能很快地解决,这就是技术深度。而你如果 A,B,C,D 四个领域都有一定的了解,这就是技术广度。
那怎样平衡好这两者之间的关系呢?
个人的看法是如果你想往技术发展,先钻研某个领域,争取有较高的造诣,之后再横向发展,了解其他的领域,做到有一技之长,这将形成你独特的优势。
因为你在 A 领域有较深的造诣之后,你将有一定的不可代替性,这就是价值。而且,现在大公司分工明确,很多时候需要的是专才,而不是什么方面都懂一点的人。当然,我不是不建议大家全面发展,只是说,先钻研某个领域,再想其他领域拓展。
第二方面:大局观
大局观,简单来说,就是看待事物的视野和角度。具体到技术人来说,主要是技术栈,技术方向的选择,以及业务方向的洞察。
一个技术团队的领导,往往需要有较好的大局观。
主要表现对于各技术栈的选择和比较、架构设计模式的考虑、设计策略等。一个良好的架构,往往能够以最小的代价应对变化无穷的需求。同时,注意:架构的选择,需要结合业务场景,脱离业务场景来谈架构都是耍流氓。
业务能力的洞察,主要是指结合业务和技术,能够做出合适的判断,要清楚当下那些任务优先级别比较高,做什么事情收益最高。技术与业务是分不开的,在很多情况下,技术是服务于产品的。任凭你技术做牛,效果做得再酷炫,性能做得再好,产品没人用,那就没什么卵用。因为在这里,你的技术产生不了任何价值,而公司说到底,就是一个盈利机构,你觉得可能一直烧钱下去吗?
当然,对于产品天马行空,异想天开的想法,我们也要懂得合理拒绝,不能由产品牵着鼻子走。
举一个例子,去年 去年“网传中国平安产品经理与开发因「根据手机壳颜色改变app主题」需求打架一事”,这反映了一个公认的事实,程序员或多或少与产品经理存在着某些矛盾。最好的解决方案是,技术人懂点产品思维,产品懂点技术,考虑问题多从对方的角度出发。
总结
说到底,就是要培养自己的核心竞争力,形成自己独特的优势。而如何确立自己的竞争力,就需要我们逐步培养,技术深度,技术广度,业务洞察能力等。做好每一项,都不是一件 easy 的事情。尤其是技术深度,业务洞察能力。后面有时间,再单独写文章与大家探讨技术深度的问题,因为我现在也不是有特别深的理解,哈哈。
记住,职场中,做好自己本职工作的同时,请记住要培养自己的核心竞争力。公司只是你工作的一个平台,不是你的全部。你离开了这家公司,你还能潇洒地生活吗?
以上仅属个人意见,某些地方有些纸上谈兵,不喜轻喷。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
---------------------
作者:gdutxiaoxu
来源:CSDN
文章来源于网络,如有侵权,请联系小编删除。
百度在职 iOS 架构师的成长笔记,送给还在迷茫的你!的更多相关文章
- 一个Android 架构师的成长之路
前言 总所周知,当下流行的编程语言有Java.PHP.C.C++.Python.Go等.其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词.Java ...
- 图灵学院JAVA互联网架构师专题学习笔记
图灵学院JAVA互联网架构师专题学习笔记 下载链接:链接: https://pan.baidu.com/s/1xbxDzmnQudnYtMt5Ce1ONQ 密码: fbdj如果失效联系v:itit11 ...
- IOS架构师之路:我对IOS架构的点点认识(大纲)
1.今天我鼓起了勇气,想纪录自己对IOS架构学习成长的点点滴滴. 从事IOS开发也有几年的时间,从刚開始最主要的语言.界面.逻辑,再到后面复杂点的线程.数据处理.网络请求.动画,最后到最复杂的底层音视 ...
- iOS架构师之路:控制器(View Controller)瘦身设计
前言 古老的MVC架构是容易被iOS开发者理解和接受的设计模式,但是由于iOS开发的项目功能越来越负责庞大,项目代码也随之不断壮大,MVC的模糊定义导致我们的业务开发工程师很容易把大量的代码写到视图控 ...
- iOS架构师之路:慎用继承
最近在看大神Casa的文章<跳出面向对象思想(一) 继承>,脑洞大开.文章给我们展示了一个随着产品需求不断变化的例子,该例子中通过继承实现不同页面的搜索视图和搜索逻辑的代码复用,随着产品需 ...
- 一名前端Web架构师的成长之路(转载)
本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...
- 2018 年 3 月 iOS架构师 面试总结
序言: 今年2月中下旬因为个人原因,换了一份工作,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了自己的一些不足,于是就想写出来和大家分享一下, ...
- 架构师素养及从小菜进阶架构(CTO)的书籍【转】
CTO要了解无线技术/搜索/大数据/数据库等. -- 通常定义架构有几个层次,这包括业务架构.产品架构.应用架构和技术架构: 1.业务架构:描述一个企业围绕一个行业做了哪些业务,例如支付行业的收单.退 ...
- 周爱民:真正的架构师是没有title的(图灵访谈)
周爱民,现任豌豆荚架构师,国内软件开发界资深软件工程师.从1996年起开始涉足商业软件开发,历任部门经理.区域总经理.高级软件工程师.平台架构师等职,有18年的软件开发与架构.项目管理及团队建设经验, ...
随机推荐
- AngularJS学习之旅—AngularJS 过滤器(七)
1.AngularJS 过滤器 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器可用于转换数据: 过滤器 描述 currency 格式化数字为货币格式. filter ...
- AngularJS学习之旅—AngularJS Scope作用域(五)
1.AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sco ...
- web渗透 学习计划(转载)
作者:向生李链接:https://www.zhihu.com/question/21914899/answer/39344435来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- C++中 #if 和 #ifdef 区别
以#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作#if 条件语句程序段1 //如果条件语句成立,那么就编译程序段1#endif程序段2//如果条件不语句成立,那么就编译程序段2# ...
- 周末班:Python基础之网络编程
一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据, ...
- SQL NOT NULL 约束
SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值. NOT NULL 约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新记录或者更新记录. 下面的 SQ ...
- 01背包问题(动态规划)python实现
01背包问题(动态规划)python实现 在01背包问题中,在选择是否要把一个物品加到背包中.必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比較,这样的方式形成的问题导致了很多重叠子问题, ...
- Linux内核入门到放弃-时间管理-《深入Linux内核架构》笔记
低分辨率定时器的实现 定时器激活与进程统计 IA-32将timer_interrupt注册为中断处理程序,而AMD64使用的是timer_event_interrupt.这两个函数都通过调用所谓的全局 ...
- Atcoder Dwango Programming Contest V
模拟,做了ABC三题. D难一些,就不会了. 中规中矩的吧... Atcoder DPCV B 题意:给一个序列,求出所有的子串和中AND值最大的k个数的AND. 思路:既然要求AND,那么肯定按位考 ...
- P5239 回忆京都(洛谷3月月赛T2)
题目描述 射命丸文在取材中发现了一个好玩的东西,叫做组合数. 组合数的定义如下:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合.所有组合的数量,就是组合数 ...