如何在技术之路上一步步提升自学之路的方式?

所以我感觉我是可以分享一下我自己自学Android的一些经验,而且这些经验也是通用的,比如我还有自学PHP用来写后台开发等等,希望对大家在开发道路上能有一些帮助。国内外互联网公司有哪些比较优秀,经常更新的技术团队博客?

我于2012年毕业,专业是金融。 我在大学时自学了Android。 毕业后,我在百度云从事Android开发。 我目前的职位是腾讯的Android高级研发工程师。

所以我觉得可以分享一些自己自学Android的经验,而且这些经验也是具有普遍性的。 比如我还自学了PHP写后端开发等等,希望能够对大家开发之路上有一些帮助。

我们工程师一般有助理、普通、高级、专家等。我把自学路径抽象成初级路径、中级路径、还有我还没有达到的高级路径。 下面我们依次分析一下如何通过自学在技术道路上一步步提高。

1. 初级道路

1.1 项目方法

对于自学的人来说,边做边学是最容易上手的。 我的技术之旅也是这样开始的。 我参加创业大赛的时候,我们想做一个类似Admob的产品,所以拉了一帮朋友开始做这个产品。 由于我们缺乏技术,所以我们自己也加入了游戏。 我们从一个实际项目开始,学习Java和Android,一步步完成产品开发。 在后续的过程中,我们还做了一个抄袭Bump的软件叫:“分享趣”和一个聚会O2O软件。 我也忘记了。 什么名字? 或许你还可以在豌豆荚上搜索一下。

1.2 学习

爪哇

JAVA核心技术(第一卷)(豆瓣)Effective java中文版(第2版)

安卓

Android开发入门教程(豆瓣)

这个阶段我的学习资料主要来自书本。 那时已经是10年前了,网上的资料并不多(我还是习惯在书本上系统学习)。 我记得Java语言是在《Java核心技术》中学习的,这个系列有两本书。 这本书可以理解为一本参考书。 它解释了有关 Java 的一切。 当你不记得相关知识时,你需要拿出来巩固你所学的知识。 Effect Java的学习是进阶学习。 在了解Java基础的前提下,开始学习更多的知识点。

学完Java后,按照入门教程慢慢开始Android开发。 此时的API主要是和入门的Android开发教程进行对比。 但这个时候大家都会遇到一种情况,实施后会出现一些莫名其妙的问题,所以也必须借助一些平台进行搜索。

1.3 解答疑惑

现在安卓资料到处都是,最好的办法就是VPN+google。 基本上大部分问题已经有了答案,因为这个行业已经非常成熟了。 我们当时相关信息比较少,所以就去论坛提问,比如当时的eoeandroid、csdn手机论坛。 我们自己寻找答案或者提出问题,解决了很多疑惑。

现在对每个人来说最好的事情就是:

堆栈溢出

1.4 找工作

1.4.1 策略

学习+练习题

当你不断学习、做项目来总结经验,总结遇到的坑和解决方案的时候,这就是我们要从草根发展走向专业化的时候,所以我们需要一份工作。

面试时,大公司对应届毕业生的要求主要集中在基础,所以数据结构+算法和计算机基础知识非常重要。

1.4.2 信息

我此时的学习资料主要是:

数据结构与算法分析(豆瓣) 编程逐级(豆瓣)

C语言编程(豆瓣)

计算机网络(豆瓣)

操作系统(豆瓣)

可惜最后两本书看的少,操作系统看不懂,只能多研究问题。

1.4.3 访谈策略

内部推荐+面试经验

内部推荐最好的办法就是联系你喜欢的公司或产品的直接负责人、面试官或开发人员。 例如,您可以联系我。 QQ空间和腾讯微云(我直接面试你)都在招人(强行做个广告)。 社交平台是联系他们的最佳渠道。 当时我通过微博找到了百度云移动端的负责人,然后得到了面试机会(当时我们还在做一个百度通讯录产品)。

面试策略比较简单,就是先去一些自己不愿意去的公司,积累更多的面试经验,对那些不知道的寻找答案,了解后再去面试与您喜欢的公司和产品。

1.4.4 系统学习

加入公司后你会发现你之前写的软件并不是商业软件。 它只实现了功能,根本无法保证质量和设计。因此,工作之余,你有很好的机会学习商业软件开发。 在这个过程中,你必须更多地依靠自己的不断学习和提高。 这就是我们下一个话题——中级工程师之路。

更新:2017 年 1 月 26 日

2.中间路

2.1 需要更多的中级开发人员才能更好地完成一个大型商业软件的核心功能模块,或者中小型商业软件的整体架构。

2.2 技能树

很多人想了解技能树,比如一般的:

计算机网络、数据库、存储、数据结构、软件架构与设计、编码语言、平台特性等技术点。

技能树有很多很多,这些其实取决于你的项目经验和项目特点。 为了点亮这些技能树,我们将技能树抽象到更抽象的层面。

2.2.1 解决问题的思路

很多人不明白的是,为什么很多大公司总是喜欢问算法问题,而忽略了自己的项目本身。 其实很多时候当你的项目经验不够或者不够深入的时候,面试官无法理解你的解决问题的思路以及你是否有好的方法来解决其他复杂的问题。

实践带来真知。 让我问一个问题。 这是我们在实际开发中会遇到的情况。 比如我们设计了一套数据通知机制。 存储结构是一个链表。 这个链表的排序方法是ModifyTime。 现在有通知传来。 当更新一条数据时,更新数据的ModifyTime也发生了变化。 我们如何以更高的性能更新这些数据? (这个问题可以再深入一点,除了ModifyTime排序之外,你还可以依赖更多的排序规则,那么你的数据结构是什么?)这个策略的优化足以让我们在有大量的数据。

(一)基础扎实

首先,我们需要有比较扎实的基础技术能力。 这道题我们需要的是扎实的数据结构和算法能力。 如果我们想做上传和下载速度模块,那么我们需要很强的计算机网络和存储基础知识。 是的,这些基础是我们解决问题思路的保障。

(二)学习很重要

这个学习就是向前人学习,向别人学习。 其实,做很多事情都是有套路的。 多看源码和一些优秀的组件,多和组里的专家交流,了解别人是怎么做的,这往往可以帮助我们的思维变得更加开放,让我们有更多解决问题的思路。

2.2.2 软件架构与设计

我们知道解决问题是第一步,我们也有想法,但是怎样才能让我们的代码更方便维护和扩展呢?

现在大部分童鞋都是基于面向对象开发的。 你知道为什么你的项目开发不使用面向过程的写作吗? (虽然很多时候我们还是做面向流程的开发)

以前我们总是抱怨产品经理没事就改需求。 互联网产品的开发更多时候是面向变化的,而面向流程的开发是在需求明确的情况下开发的,否则一旦需求发生变化,你的流程可能会发生变化。 一切都是错误的,整个事情需要重写。 这就是为什么我们经常使用基于面向过程开发的面向对象语言,需求变更后维护起来如此困难,所以只能抱怨产品经理。

许多人向没有设计经验的学生推荐有关设计模式的书籍。 我不推荐这些。 这些设计图案是基于我们正在建造的房子的装饰品。 我们需要解决的最关键问题是:

这里我推荐一本书:

大象:UML 思维(第二版)

高级推广

有了这个基础之后,你就可以看设计模式,更重要的是看优秀的组件或者系统源码。 这些源码中有很多设计模式的设计和应用,可以帮助你构建好的模型。 还产生更优雅的代码。

2.2.3 经验

(1)经验的作用

一个好的工程师有丰富的开发经验。 在你创业之前,他会知道瓶颈在哪里,需要注意哪些地方?

比如:关于错误码的设计,一个业务模块的错误码的设计是不是可以随意设计,只要不和背景重叠就可以了?

那么问题来了,我们现在有些错误是要重试的,那么遇到错误码后我们如何区分是否应该重试呢? 如果硬编码了几个错误码,以后扩展的话会出现什么情况? 如果后台下发不及时或者错误码越来越多怎么办?

这时候,有经验的驱动就会告诉你,HTTP错误码设计得很好,因为它依赖于number字段:

HTTP协议中的1xx、2xx、3xx、4xx、5xx状态码分别代表什么? 常见错误码一览及其含义 – 大神最爱 – 博客园

(二)如何拥有丰富的经验

项目经验+总结+重新发明轮子

项目经历越多,自然就会理解得越多,踩过的坑也就越多。 总结得越多,记忆就越深刻,就能系统地总结这些经验。 只有重复以前的错误,你才会知道,如果你没有做过,你永远会错过那么多。 坑。

如果可能的话,最好阅读更多优秀的源代码并重新创建它。

2.3 广阔的视野

国内众多科技项目是如何诞生的? 因为国外有很好的解决方案。 比如FB在2.3解决了LinearAlloc的问题后,国内的解决方案开始爆发。 比如FB的Buck构建,国内很多技术团队都基于此做了构建优化(并且也得到了推广)。 这里我就不多说了。 有能力的学生就应该多创新。

国内外哪些互联网公司拥有优秀且经常更新的技术团队博客? – 互联网公司-知乎

单片机

草莓怎么可以用树来形容?草莓树的花语含义

2024-5-5 19:02:40

单片机

开发板与最小系统板的优缺点进行对比对比

2024-5-5 20:03:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索