In 2020, Android developers need skills

Android a technical expert, there are at least two to three fields of expertise.

 

Links: https://www.techyourchance.com/android-developer-skills/
Author: Vasiliy Zukanov, independent Android developers and software consultant
Translator: Luozhao Cheng, Android Developers

Many Android developers often ask me, what things to learn in order to become a good engineer Android? For that matter, they are more or less describes some differences, but overall, we all need to learn a range of skills in order to become a good Android engineers.

In my opinion, there is such confusion is normal. Android is a huge and dynamic ecosystem, you may need to spend several weeks learning to understand and its associated tools and concepts, but in the end you will find that there are a lot of them are not very important, or not very useful. Therefore, in this article I will share what I use to Android in the development of important skills, hoping to help you, let you put your focus on the important things.

Of course, if you are an experienced Android developer, you probably know that knowledge. There are a lot of skills and perspectives need a lot of basic knowledge of precipitation, when you do not have enough experience, it is difficult to see these skill points. Article, I can not list all the skills needed to Android developers. So, according to my different experiences, knowledge of these points have been roughly grouped. Please note that this is only a rough grouping, not necessarily very accurate.

EDITORIAL

If you just want to be a man Android developers, and has not written any application, then this article is for you, and a little too early. This article is designed to help developers become a more professional person.

In this paper, I will give you many suggestions, will not let you leave empty-handed. Article lists how to become a professional developer in a short time. After reading the article, you need to practice, and often come back to look at these skills.

Before the beginning of this article, I'll have you posted in Google Play and Android applications to use GitHub source code management.

A, 0-2 years of development experience

Android is a very complex framework, it has a steep learning curve. There are some really complex concepts of Native Android developers need to learn, but the other part is due to Android, causing its complexity.

When you enter the profession, in addition to your software development work, you should learn the Android framework, forget language, architecture, popular open source database, to focus on core concepts, and conduct in-depth research.

Specifically, I suggest you learn more about the following:

  • Android memory management and process scheduling

When faced with "Low Memory Killer", how to ensure stable and reliable operation of your application? This is a very complicated matter. Long story short, when the user switches to another application, your application life cycle will be disrupted, but when the user switches back after a while back, but I hope you user applications like nothing has happened, like, normal operation .

In this article, I will not introduce any details of memory management, if you want to know them, you can read this article.

  • Life cycle

If someone asked me to say Android application complexity and the main source of Bug, I immediately shouted to him "life cycle" (and then covered her face with her).

Application, Activity, Fragment, Service, BroadcastReceiver, ContentProvider and some of the core components of the Android framework, have complex life cycles, and their life cycle is not the same. If you think this is not enough, Google has been introducing new libraries and frameworks, these libraries have their own complexities and independent life cycle. Loader, ViewModel and LiveData are made to address these problems and launched.

There are pieces of interesting things, I have never seen any definition of "life cycle". We've been using it, but in the end it is what does that mean? As far as I know, in a way, you just strung together some of the nodes, showing a build lifecycle. I have had a lot of thinking on the life cycle, where I will try to define it.

The life cycle of components is an abstract state machine. Abstract meaning here means that the state of these state machines are pre-defined transition condition is defined therebetween. But these definitions are incomplete. You need to realize the missing part, so that they can work properly. The missing piece is a subset of these component approach, which we call "life-cycle correction", in addition to the state machine itself, the life cycle of these callbacks, there are a lot of implicit limitations and restrictions. Some of these restrictions in a written document, while others do not record.

How complex life cycle in the end? Let's look at this picture (it's a bit incomplete, still a little out of date). This picture looks a bit scary. However, you do not panic, most Andorid developers do not understand this diagram. In fact, even Google's Android developers also do not understand the life-cycle issues. When Google released Lifecycle module, which introduces some relevant Fragment of bug, until the follow-up of the new release and we have to be repaired.

Although you do not have full control of the life cycle of Android, but you need to know some important details. Otherwise, your code will become cluttered and prone to a series of difficult problems. I wrote two articles Activity and Fragment life cycle life cycle, describes the details of the life cycle. When you do not know how to use onStart and onResume, you can go and see these two articles.

When you master the basics of the life cycle, you can go and see ten sins Android development Gabor Varadi write this article, citing the majority of developers will make mistakes. Most of these errors are related to the life cycle.

By the way, in the interview, problems related to the life cycle will be frequently asked. This is also the reason you have to take the life cycle of learning.

  • Context

In each Android application, you have one or more context objects.

And the life cycle of the same, it can hardly be explained. It's like a "God class", as it has a lot of ability. It is difficult to put it clearly describe a sentence or two. Nevertheless, understanding the difference between the previous duties and different Context Context is very important.

In this paper, there is no more about Context, I suggest you read the contents of what StackOverflow about "What is 'Context' on Android?" The answer and this answer.

  • UI 线程

Every Android application has a special thread - UI thread. This is a page UI thread draw on the screen. If you let the UI thread overloaded, your application will become Caton, do not respond. In extreme cases, UI thread in error will cause the entire application error (at least looks like a mistake).

If you want to learn more about the principles behind the thread mechanism, you can look at this video, the video explained in detail in the Android multithreaded, contains details of the UI thread and possible problems.

  • Logic Split

On the whole, the code of the Android framework is very "clean." It contains a lot of God classes, each have thousands of lines of code, and we also have to extend these classes to make our applications up and running. In most cases, either Application, Activity, Fragments or Service, we are in a great class, doing a lot of things.

Although Andorid development, which is a common practice, but it looks like we do not conducive to long-term maintenance of the code logic. So I suggested that we should pay attention to this problem as much as possible, look for opportunities to refactor the code to split the logic into separate classes to go.

To be honest, I do not think a junior developer can make a lot of improvement work on architecture and design. Correct code logic package, extracting meaningful class require some development experience. Of course, I do not want you not to think about the code split, you can do some things within its power to avoid uncontrollable situations (for example, an Activity wrote more than 5,000 lines of code).

At first, you can try logic and Context-related split described in this article.

Second, the 2-4 years of development experience

When you're working a few years in your career, you become experienced Android developers, through research and study, you can easily implement some non-specialized functionality. That next step, what do you do?

I think, at this time, you're already familiar with the basics of the Android framework, you can try to learn higher-level skills. These skills are not limited to Android, they are some of the common software development skills. Specifically, you can study the following topics:

  • Dependency Injection

Dependency injection is a pattern design of the structure of interest isolated. Two functions it is mainly used for the separation of the application: The application and core functions, core functional components to realize the link between.

In some ways, code-library dependency injection you like a computer: dependency injection library foundation is like motherboards, and other functional components like the CPU, memory and peripherals. As long as you code implements dependency injection, you can easily insert a new functionality, and can be easily reused functions of other components, you may easily use functions of the new component. Although this analogy a bit exaggerated, but in my opinion, it does a very good reflection of the idea behind dependency injection.

Unfortunately, now article on dependency injection, there is a lot of misunderstanding, which gives beginners bring a lot of interference. So, if you want to learn dependency injection, I suggest you read this article, this article, I analyze a large number of dependency injection "myth."

  • UI separation

Because of the architecture of the Android framework itself, resulting in the development process we have, so that other users coupled logic pages and applications together. Almost all of the Android beginners will like this. This coupling will lead us to write a large class that there are UI rendering application, network processing, multi-threaded processing, application business logic.

In my experience, UI logic and other logic coupled together, will lead to code maintainability is getting worse, sooner or later will use the code becomes difficult to understand, can not read. In the end, likely because a small change in function, causing debilitating side effects.

To UI logic separated from other logic can be used with Model- View - X architectural pattern. For example: Model-View-Contoller (MVC), Model-View-Presenter (MVP), Model-View = ViewModel (MVVM). These architectural patterns belong to the same class of architecture, of course, this type of architecture contains not only these, there are other architectural pattern listed. Here, for more convenient description of this type of architecture model, I just say it together MVx mode.

When you're learning MVx mode, keep in mind that these are not architecture, but an architectural pattern. These architectural pattern used only for UI presentation logic. Therefore, using only MVx does not give you a good framework to have a good infrastructure, you still need to make more efforts in other aspects can be achieved.

  • Multithreading

Experienced Android developers will understand multi-threading, and understand their impact on the application. You might say, I am proficient AsyncTask, RxJava, coroutines and so on. I want to express multithreading not you understand this. Uses multi-threading is not the same framework to understand multi-threading.

For example, many Android developers believe that the use AsyncTask cause a memory leak. This view from the default Android Studio multithreaded lint rule. That being the case, that this view is right yet? Unfortunately, this view is wrong. Here, I do not explain their details, you can read this article, there are a lot of details about AsyncTask.

I think to understand multi-threaded process, it is necessary to use any multi-threaded framework, even on the basis of Thread, can write correct concurrent code. To achieve this goal, you not only need to know your favorite multi-threaded API library, you also need to understand the details of multithreaded. These multi-threaded libraries though easy to use, but if you do not understand the basic details of the multi-threaded, then your application multithreaded problem is only a matter of time occurs.

If you want to learn multi-threaded, starting from this video, the video explains the basic concepts and principles of all Android developers need to know.

  • automated test

As far as I know, many Android project, do not use any automated test. In the project uses automated testing, the majority QA personnel also use tools like Appium done. This is the status of the entire Android industry, very sad. The reason why there is no automated testing, this problem can be traced back to the origin of Android, Google is also a very long period of time, there is no concern over the third-party automated test applications.

Developers now have unit tests and automated UI testing experience of the great demand. Even if you are not used to an automated test of any company to the interview, if you say you'll automated testing, the interview will give you extra points. On the other hand, if you go to is a widely used test automation company, you do not have automated testing of skills, which will give you an interview minus points, at a disadvantage.

Therefore, I suggest that every Android developers to learn about the knowledge of automated testing. Personally, I prefer the unit tests. And some developers like UI test automation. So, you can choose the one you are more interested in technology, try.

Three, four years of experience or more

If you already have a wealth of experience in the development of Android, then it's time to learn some "meta" skills and in-depth research in specific areas. In my opinion, the following skills for professional developers, is a very good direction.

  • Technology assessment program

If you have not done this thing, then now is the time to start to do. Every important technical decisions, we need to assess trade-offs. Sometimes, the results brought about by this decision is very good, immediate. But most of the time, not always immediate, to see the effect. In general, the greater the range of required decisions involved the greater the scope of the assessment, in addition to the simple things that can make decisions, there are many items can be assessed is very abstract, a short time can not see the results.

In your own experience level, the face of many choices, you should at least know how to find trade-offs. If you can provide a useful assessment of proposals for technical solutions, you're very good up. This technical solution to assess trade-off is a very complex skills. Typically, with other developers, project managers even when other departmental staff to discuss, you can find a compromise, we will be able to conduct program evaluation. Therefore, in the case of large numbers, you only need to have the ability to assess the program's enough.

That we call "technology assessment program" in the end mean? To tell the truth, difficult to specify what it is. However, we can provide some counter-examples to explain why not suitable for use in development. for example:

We should use multiple threads to migrate to RxJava, rather than AsyncTask, because AsyncTask cause a memory leak.

As I said earlier, AsyncTask and will not cause a memory leak. So the above sentence is wrong. Saying this, developers are not in-depth study of multi-threading. In addition, he did not mention RxJava problems. For a project developers, RxJava there is a very steep learning curve.

We should write unit tests for our new code, and to set a long-term goal of covering all of the code in order to ensure the quality of our code.

This sentence contains several premises, first of all, we now begin unit testing is not possible, at least requiring developers to invest time to learn this technology. Writing unit tests is a very wise decision. We can not write unit tests for all code, because some part is unstable. Finally, to achieve a specific objective coverage does not automatically improve the "quality." In this case, developers do not understand unit tests, they can not determine the use and impact of unit testing involved in the project.

I hope you've got a rough idea of ​​"technology assessment program," if you have an important decision, you need to complete all the necessary research, if you still do not see the whole complex network assessment exists, it may be We did not do your research. In making your decision, some things may be beyond the scope of technology, you also need to consider the impact of your decisions on other sectors of colleagues.

  • professional field

How to distinguish between a general and a technical expert developer? Is the number of concepts we are familiar with it? I think that, in technical terms, to distinguish whether it is primarily an expert on the depth of knowledge.

As a technical expert, you should have one or more areas of expertise. You know the details of these areas, than the average developer knows much more. You need to continue in-depth study, to ensure that your professional depth, learn about the latest developments in the field of professional, not surprised by new tools and technologies. In addition, even if you do not use certain technologies in any project, you also need to study the various costs associated with the use of these technologies.

Now, have their own area of ​​expertise is difficult. This is not a pick from the blog a few good articles to read on it, nor read a few books, a few doors to complete a good lesson on the can. Of course, by learning the content on your way experts are helpful, but have their own areas of expertise, the only way is to actively participate in learning research and gain a lot of experience.

I like the physicist Niels Bohr said these words:

An expert is a man who has made all the mistakes which can be made, in a narrow field. (Experts is to put all of the wrong committed in the field are guilty person finished.)

We can do in-depth study which areas? In fact, almost all of them can be carried out in-depth research in the field of software development, because there is no area too small to set professional goals. In this regard, I have some suggestions:

  • UI
  • Build System
  • Work Offline
  • Complicated by
  • NDK
  • Continuous Integration
  • performance
  • Architecture
  • monitor
  • Project management
  • Areas of expertise

There are many, many. It should be noted that the above I listed the contents of some does not belong strictly technical fields. As long as you can generate value for your employer, you can choose any area you like and in-depth study.

I think, a technical expert Android, there are at least two to three fields of expertise, for example, my area of ​​expertise are: architecture, unit testing, concurrency, dependency injection. I believe that in the near future, I will be able to "reconstruct ancestral Code" Add my expertise inside the list.

So, if you have more than 4 years of experience, what is your area of ​​expertise?

to sum up

Above, it is my suggestion that you, as a professional Android developers should have the skills.

You may have noticed that my article titled "Android Developer Skills for 2020 (2020 years, Android developers need skills)," but there is nothing in this article is specific to the 2020's. I can write this in a year or two, because this article for all time, basic and important concepts not often change.

Now, if you are curious about the latest developments in Android ecosystem, you can read my other article, I summarize the status of the development of Android by the end of 2019. Finally, I repeat, if you want to be a good Android developer, focus on basic and important things to do in-depth research.

As always, thank you for reading. You can leave comments and questions below.

end

Finally, Xiao Bian want to say: No matter what direction after selecting development, it is important to learn the technical aspects of Android, after all, in fact, for programmers, content knowledge to learn, there is too much technology, in order not to be environment eliminated only improve ourselves, always us to adapt to the environment, not the environment to adapt to us!

When programmers easily, when a good programmer is a need to learn from junior programmer to senior programmer, architect from primary to senior architect, or to management, technical director from technical manager to each stage We need to have different capabilities. Early to determine their career direction, in order to throw off their peers at work and in capacity building.

Want to pay high salaries to achieve technological upgrading qualitative leap. The quickest way is to take someone with you to analyze, so it is most efficient to learn, so in order that we can successfully advanced senior, architect, I have specially prepared for you a master learning source video quality and frame Android architect tutorial , you learn a guarantee to ensure the future salary rises to a higher level. (The following is a small part, for more advanced architecture succinctly and other video information can click on the small card acquisition)

When you have to learn lines, what to learn, but also know how to go beyond the way, the theory always seen a lot of practice.

The following are today to share some exclusive dry:
"Android architecture video + BAT interview topic PDF + study notes"

Android development of core knowledge [notes]

[Android thinking brain map (skill tree)]

[Android core advanced technology PDF document, BAT manufacturers interview Zhenti resolved]

 

[Android] advanced architecture video learning resources

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

 

 

 

上述【高清技术脑图】以及【配套的架构技术PDF】点击:《Android架构视频+BAT面试专题PDF+学习笔记》
即可获取!

觉得不错,记得点个关注,第一时间获取最新资讯和技术分享哦

发布了17 篇原创文章 · 获赞 0 · 访问量 161

Guess you like

Origin blog.csdn.net/chuhe1989/article/details/104334504