In the context of market contraction and the trend of big front-end, how can mobile programmers plan their careers and stay competitive? This article shares with you the development trend of big front-end, the skills required for advanced Android development, and the career development path of mobile programmers. About the Author: Kong Tao is currently in charge of the mobile development of financial products at iQiyi Technology Product Center. With 7 years of experience in Android development, he has worked as an Android engineer in large Internet companies such as Sina and Baidu, responsible for the development of news, map and other apps. He is familiar with the principles of the Android system and the modular, componentized and plug-in architecture design of large apps. With the advent of the mobile Internet era, mobile apps have become the new mainstream, requiring development for Android and iOS, and there were also different versions such as Windows Phone. In the early days, development was mainly in the form of hybrids represented by PhoneGap and WebView embedded in the App, which was a huge waste of manpower and resources. Since React Native in 2015, cross-platform frameworks such as Weex, Flutter, and Kotlin-Native have appeared one after another. In addition to WeChat mini-programs and quick applications jointly promoted by mobile phone manufacturers, front-end technology has more and more usage scenarios on mobile terminals. Therefore, more and more companies are also making corresponding adjustments in their organizational structure to adapt to this big front-end trend. In the past, the team composition was mainly composed of mobile programmers. Now, in addition to Android/iOS development, there are also RN/H5/mini program developers. So, does the big front-end trend mean that traditional Native Android programmers need to transform? Nowadays, the only mainstream mobile operating systems are Android and iOS. Taking the former as an example, Android has been widely used in mobile phones, tablets, car networks, the Internet of Things, smart TVs and other fields, and is a veritable terminal overlord. In addition, Android accounts for more than 80% of the domestic mobile phone market, and the possibility of being replaced by other OS in the short term is very low, so native programmers still have a very large market. Nowadays, the division of labor in technology is becoming more and more detailed, which also means that most companies need specialized talents, and it is best to be proficient in one field and master many fields. If you go to a large company for an Android interview, if your Android technology is not deep, the interviewer will not be interested in the rest of the front-end, back-end, and Python technologies. So it is not the case that the more you know, the better. You must do a good job of subtraction, specialize in one field first, and then learn other technologies. In the era of big front-end, a qualified developer should be JS + iOS / Android. He can be a skilled front-end developer who has learned a little native, or a native programmer who knows JS. If the company is mainly App-based and focuses on user interaction experience, a reasonable route is for native app developers to insist on refining the native part, and then learn JS front-end knowledge and broaden the technology stack. 1. From beginner to advanced, a guide for mobile programmersBelow we take Android development as an example, and sort out the skill points required for mobile programmers to advance from beginner to advanced under the big front-end trend from both hard skills and soft skills, and recommend some practical books and materials. 1. Hard skills: professional technical knowledge 1. Java / Kotlin development language (1) Java Common data structures: ArrayList, Vector, CopyOnWriteArrayList, HaspMap, ConcurrentHashMap, HashTable and other usage scenarios. JVM virtual machine includes Java memory management, GC garbage collection mechanism, and class loading mechanism. Recommended book: "In-depth understanding of Java virtual machine JVM advanced features and best practices". Multithreaded programming, including thread pools, lock mechanisms, and thread synchronization. Recommended books: "Java Concurrency Programming in Action" and "Java Multithreaded Programming Core Technology". AOP programming implementation includes JDK dynamic proxy implementation, ASM direct bytecode operation, and CGLIB implementation. Its principle encapsulates ASM and is more convenient to use. Javassist : Directly modify the method that needs to be cut in before the bytecode is loaded, as well as the annotation processor APT. This is widely used in open source libraries in Android, such as DataBinding, ButterKnife, EventBus3, etc. Exception handling Exception , including checked exceptions and runtime exception handling. IO flow related , including blocking IO and non-blocking IO. Some advanced features of Java , such as reflection, proxy, generics, enumeration, regular expressions, etc.; at the same time, learn about the new features of jdk1.8, 1.9, 1.10, etc. There are many related books, and I recommend "Thinking in Java" and "Effective Java" . (2) Kotlin Kotlin is a new JVM-based programming language, which was announced by Google at Google IO 2017 as the official development language for Android. What are the advantages of Kotlin? ① Simplicity: It provides many standard functions, which greatly reduces the amount of boilerplate code. ② Security: Avoid errors such as null pointer exceptions. ③Interoperability: Make full use of existing libraries of JVM, Android and browsers. ④Tool-friendly: Can be built using any Java IDE or command line. In Kotlin, we should establish the idea of functional programming . We should understand the function as a mapping relationship from one value to another, and use the function as a unit to handle various business logics. Functions can be used as parameters or return values. We should use more standard functions provided by Kotlin, such as let, run, with, apply, also, and Lambda expressions. We should try to use closures and higher-order functions. Another outstanding feature of Kotlin is coroutines , which provide a powerful paradigm for designing asynchronous, non-blocking programs. Coroutines are lightweight threads that provide a cheaper and more controllable operation that avoids blocking: coroutine suspension. By putting complex asynchronous operations into the underlying library, program logic can be expressed sequentially, thereby simplifying asynchronous programming. *** Let's briefly talk about Kotlin/Native . Its original design intention is to support programming in non-JVM virtual machine platform environments, such as iOS, embedded platforms, etc., and also support interoperability with C. Recommended book: "Kotlin in Action" . 2. Advanced Android Technology Points Process related , including App process principle and AIDL principle. Performance optimization , including: memory, CPU, power consumption, network requests, UI layout, threads, database and other optimization methods and the use of optimization tools. Android source code related , including: Binder mechanism, Activity startup process, Handler principle, AMS, PMS, WMS principle, View drawing process, Touch event transmission mechanism, etc. Compilation and packaging process , from Java/Kotlin source code to the final APK. The implementation principle of hot fix . There are many types of hot fix frameworks, the most common ones include bottom-level replacement, class loading and Instant Run solutions. The principle of reverse engineering is mainly to prevent the apk from being decompiled and cracked, and to understand the apk reinforcement solution. There are also many plug-in solutions at present. The mainstream technical implementation is the Hook method, which registers an Activity to occupy a pit, uses the occupied Activity to pass AMS verification, and restores the plug-in Activity. The principles of other components are roughly similar. NDK development , calling JNI and calling back Java. For custom controls , you need to pay attention to the calling timing of onMeasure, onLayout, and onDraw, as well as the Touch event distribution mechanism. Animation View Animation , view animation has been provided in very early Android versions and can only be used to set View animation. Property Animation , only for version 3.0 and above, can be set to any Object, including objects that have not yet been rendered to the screen. This type of animation is extensible and can customize animations of any type and property. Native JS interaction in Webview , commonly used JSBridge, etc. Gradle features and DSL syntax , such as the use of Gradle Transform API, allow third-party plug-ins to operate compiled class files before converting them to dex files. Using this feature, we can implement code injection or code modification during the code compilation phase, which is also the basis of many tracking point technologies and hot fix technologies. Security: HTTPS communication principle, data encryption methods, including MD5, RSA, etc., webview security, code obfuscation, data signature verification, component communication security, server communication. CI continuous integration : Jenkins, Gitlab CI and other continuous integration development tools. Sersor sensors : including gyroscopes, acceleration sensors, direction sensors, gravity sensors, light sensors, etc. Internationalization of Android development . The difference between ART and Dalvik virtual machines is mainly AOT, Ahead-Of-Time precompilation. Familiar with the DEX file structure. Unit testing : use of JUnit4, AndroidJUnitRunner, and Mockito framework. Automated testing : Monkey / Monkey Runner, Espresso, UI Automator, etc. Master the modular development method : pay attention to dividing the layers and jumping communications between modules. Code refactoring ability , recommended books: "Refactoring to Improve the Design of Existing Code", "Refactoring and Patterns" Google dynamic framework App Bundles . Jetpack is a new generation of components, tools, and architectural guidance launched by Google, designed to speed up Android application development. Jetpack is mainly divided into 4 parts: Commonly used third-party libraries for Android development: Responsive programming: RxJava, RxAndroid, Google's Agera Network libraries: including Retrofit, OkHttp, Volley Images: Fresco, Gilde, Picasso Dependency Injection: Dagger2 Databases: Realm, ORMLite, GreenDAO, ObjectBox Data bus: EventBus, otto Memory leak detection tool LeakCanary, etc. If each skill point is expanded in detail, it will form a very complex knowledge map. It is recommended that you sort out, summarize and digest it by yourself. 3. OOAD and Design Patterns In terms of architecture design, the first thing to master is object-oriented development and design. Specific knowledge points include: The three main characteristics of object-oriented programming: encapsulation, inheritance, and polymorphism. Five basic principles (SOLID principles) : single responsibility principle, open-closed principle, Liskov substitution principle, dependency inversion principle, and interface separation principle. 23 design patterns : Commonly used ones include factory, singleton, adapter, bridge, combination, proxy, command, observer, strategy, state mode, etc. 4. APP architecture design Including MVC, MVP, MVVM, MVI, VIPER, Clean Architecture, Flux. At present, in addition to MVC, MVP and MVVM are more commonly used, and the specific architecture design should be considered in combination with the business. 2. Soft skills In the workplace, if you want to become a senior programmer, it is not enough to have technical depth, you also need to master many soft skills and pay attention to the honing of comprehensive professional qualities. Many people do not pay enough attention to it at the beginning, and they are prone to encounter bottlenecks in the second half of their career advancement. Below are my personal summary of the essential soft skills for senior programmers for your reference. 1. Rapid learning ability: including technical depth and breadth, and the ability to continuously explore new technologies and keep learning. 2. Communication skills: Strengthening expression, reading and writing skills will never be outdated even in today's technologically advanced world, because any form of communication is very necessary within the company. 3. Teamwork ability: It is easy for developers to fall into an isolated interpersonal state, but development work can never be completed by one person. Only when members can truly integrate into the team and communicate and cooperate with other colleagues smoothly can their true value be reflected, and the chance of being listed as a candidate for future job promotion is also greater. 4. Time management skills: You can refer to the "Four Quadrants Rule" of time management and focus your energy and time on important but non-urgent tasks, so that you can prepare for a rainy day. 5. Influence: On the one hand, it is business influence, and on the other hand, it is technical influence. Ways to improve technical influence include: participating in more technical sharing, summarizing and disseminating accumulated knowledge; participating in technical solution reviews, sharing technical experience; helping new students solve technical problems; and sharing on blogs, Github, StackOverflow and other platforms. 6. Document writing ability: Code comments . Many programmers rarely write comments, or write too many comments, which is inappropriate. Refer to the comment standards of open source projects. Write technical design documents , including flow charts, class diagrams, functional sequence diagrams, etc. I also recommend a book: "Soft Skills: A Survival Guide Beyond Code" 2. Technical Expert VS Management, Which Path is More Suitable for You?After working for 3-5 years and having advanced to senior programmers, many people begin to face a problem: Is the future development direction technical expert or technical management? Which career development path is more suitable for them? To choose a path, you must first be clear about what you want. Whether you want to be a technician or a manager, it all depends on your goals and career planning. Everyone's actual situation is different, and so are their goals. It is recommended that you try to make a choice that matches your personality and stick to it. Even if you can't see the results for a while, you will always see the results in the long run. 1. What kind of programmer is suitable to be a technical expert? The core of a technical expert is to be in-depth and proficient. They are familiar with a certain technical field, are passionate about coding, continue to learn new technologies, and can calm down to do technology instead of being eager for quick success. People with relatively introverted personalities, not good at communication and coordination, do not want to spend a lot of time leading a team, and are mainly responsible for making key technologies professional and advanced, are more suitable for developing in the technical route, such as technical experts and architects. 2. What kind of programmer is suitable for transitioning to technical management? First of all, we need to be clear about what technical managers are usually required to do?
Accordingly, the required abilities include: the ability to report upward and communicate downward, the ability to manage teams, the ability to train personnel, the ability to control cooperation between upstream and downstream departments, the ability to communicate business needs, the ability to make decisions on major issues, the ability to plan long-term goals, execution, etc. In general, the requirements for management and technical capabilities are quite different. As a technical manager, you should first change your role perception. You cannot look at problems from the perspective of a programmer. You need to stand at a higher level and think about problems from a global perspective. Mobile programmers who are interested in management are recommended to refer to this book: "Becoming a Technical Expert" . 3. Similarities and differences between the two development paths (1) Differences: Technical experts rely more on their personal technical capabilities and need to combine business to carry out technical planning, framework design, performance optimization and technological innovation; technical managers assist the team in making products and are responsible for organizational communication and mutual coordination within and outside the team. (2) Similarities: You will need to deal with management in the end, the difference is just the amount of management work. Even if you are an architect, you still need to lead a technical team. Therefore, whether you choose a purely technical or non-technical route in the future, you need to improve your management skills, because management and communication are always required at the top. It is rare that you are at a very high level but still do not interact with anyone and contribute entirely by your own ability. 4. If I make the wrong choice, will I have a second chance to choose? I think you need to think about your career goals and career plan first, as frequent changes will have a greater impact on your career. (1) From technology to management: You need to master relevant management knowledge in advance and make changes in your role perception. You need to think about problems from a team perspective, learn more about the business, increase your influence within the department, and make the transition when there is a suitable promotion opportunity. (2) Transfer management back to technology: If you are faced with a lot of cross-departmental communication and feel that you are not suitable due to personality and other factors, you need to make a decision as soon as possible and transfer back to technical development. 3. How can mobile programmers stay competitive under the big front-end trend?I extracted some job description requirements from some first-tier companies on recruitment websites: More than 3 years of work experience, in-depth understanding of the underlying principles of the mobile terminal, independently leading or developing the core projects of more than one product, rich project experience or management ability, practical experience in React Native or Weex, mastering some front-end development technologies, HTML/JavaScript/CSS, etc. Front-end and back-end development experience is a plus. It can be seen that the market's requirements for Android programmers are getting higher and higher. In addition to a deep understanding of the underlying principles of Android, there are also requirements for front-end JS and other technologies. Today we have entered an era of terminal fragmentation. In the 12 years since the first iPhone was released in 2007, there has been no sign of smartphones being replaced. But innovation continues, such as smart watches, TVs, glasses, head-mounted VR, etc. It is conceivable that such devices will continue to increase. These new devices are also new platforms, similar to smartphones, and can install third-party applications. These platforms basically support browsers or built-in browser engines. Early explorations such as Hybrid and later React Native have made front-end development a necessary technology for the development of display terminal applications. Therefore, the biggest impact of the big front-end trend on mobile programmers is the new mobile development technology stack. As mobile devices are mainstream terminals, their application development technology should also be the technology that big front-ends pay the most attention to. In the past, the mobile development technology stack was mainly based on native development, but now the trend is that cross-platform technology is becoming more and more popular. So, in today’s rapidly changing technology environment, how can mobile programmers stay competitive? First, we need to strengthen our Android/iOS technical reserves, gain a deep understanding of the underlying principles of the system, and continue to invest in new technologies. Secondly, gradually improve the front-end technology stack, expand its breadth, and become familiar with front-end JS, as well as cross-platform frameworks such as RN and flutter. ***, choose an Android sub-field and improve it, such as application development, reverse security, audio and video, Internet of Vehicles, Internet of Things, mobile phone development, SDK development and smart TV box development, etc., choose one of them and continue to go deeper. 4. Q & A(Q represents questions from netizens, A represents answers from Kong Tao) Q: When did you start leading a team? What difficulties did you encounter when you first switched from a pure technical position to a management position? How did you overcome them? A: I started leading a team about 4 years ago, from one person contributing independently to multiple people contributing to team development. One person's ability is limited, and I have to drive everyone to solve problems. There is a change in mentality that needs to be overcome. There is a change in decision-making cognition. Q: I have been working as a small team manager in small and medium-sized companies. Where will the breakthrough for subsequent development be? Can I join a large company and switch to a technical route? A: Your breakthrough lies in the improvement of technology, which is a good route. There is no problem in working as a technician in a large company. But if you want to continue to be a manager, you must first gain some experience in large companies, work as a technician, and then slowly switch to management. Q: Which path is more advantageous: leading a large team in a startup or leading a small team in a large company? A: There is no absolute answer. If you have led a small team in a large company before and have accumulated experience, it will be no problem for you to lead a large team in a startup. But on the other hand, if you are inexperienced and lack some understanding of new things, you may encounter some bottlenecks when leading a large team in a small company. So I personally recommend that you go to a large company to gain some experience first. |
<<: Information APP interface design tips!
As the popularity of TikTok continues to grow, it...
background For Android development, during the in...
The algorithm of Baidu's drop-down box: how m...
This article mainly introduces how to list produc...
Many startup products are struggling to find the ...
By reviewing the 2021 520 marketing data and refe...
As early as 2012, the academic journal Journal of...
Can an e-commerce business license be used to ope...
During the May Day holiday, a grandmother and her...
Loading long image... Source: Authentic Scenery...
Course Contents: 01. Mental state 01.What can par...
Recently, Google pushed the latest beta system An...
Many small and medium-sized businesses want to se...
Review expert: Cai Dawei, Professor of the School...
In the current Chinese mobile phone market, the f...