Preface:
It has been five years since the 13 mobile client fire began. Now the mobile side of the situation does not need too much nonsense to describe, a sentence summed up is: "Tide receded, who in the naked swimming a look on the clear." "I want to use this article to talk about the trends and opportunities in my mind about the next five years of mobile internet, and what our IOS engineers can do to prepare for self-improvement," he wrote. The subjective view of this article is more, writing is more radical, for reference only.
We all know that prices will be affected by supply and demand, if a skill is scarce in the market, then the worker who has mastered this skill will pay a relatively high salary, for example, before and after 14 can write good UITableView can find a relatively good job. In my opinion, the next few years of mobile internet, will appear "an excess, two deficiencies", I will analyze and try to give some advice
Here is a small series with some iOS development of learning materials and interview questions, as for other information video I will not all, need to add my new group to collect 711413569
(i) Excess UI engineer
This is my cliché, the first thing to note is to avoid becoming an API call engineer, because these UI knowledge of personal value growth is not linear, if you remember high school math, please recall the y = ln (x) this function curve. From zero to write good UITableView to an engineer to bring the benefits, far from writing good uitableview to write good uistackview can compare.
Take Uistackview as an example, not to mention that it began to support iOS 9, and if the app does not support iOS 9, I'm afraid to wait until se years. Say that it provides the functionality, although simplifying the existing scene, but this function can be achieved by encapsulating the existing components, I believe many large projects have, why do you have to take the effort to compatible version, and then learn a new API? People's energy is limited, if you always chase the footsteps of Apple, every year to fill the WWDC of those new pits and old debt, then the vision will always be stuck in IOS.
(ii) Shortage of professional and technical personnel
Here the expertise refers to the mobile side of this big topic in the more vertical areas of knowledge, probably contains the following aspects:
1. Image/Video Processing
With the popularity of network infrastructure, as well as the significant reduction in the cost of traffic, 4G is basically fully commercial, if the mobile end of the first five years is text-based, image video supplemented, in the next few years, users of high-quality images and video requirements will be growing.
Since I do not know about this area, so I can not recommend much, in my impression, OpenGL this cross-platform engine, computer graphics knowledge, Video coding and protocol can take time to study, there are many excellent start-up companies are also in urgent need of this kind of talent. Strictly speaking, these knowledge is not the knowledge of mobile Internet, so the threshold is higher, but the threshold of this thing is a double-edged sword. It will increase your learning difficulty, but once you have mastered this knowledge, the threshold will become your personal value of the moat.
I particularly want to declare that coreanimation this kind of things if not the work of mandatory use, generally do not touch, like no one will be silly to write games with Spritekit/scenekit, this API-intensive, and can not cross-end of the library is no future, The real value of the animation must be a unified DSL (domain-specific language) to implement, and then exported to each platform, so developers must be more in the principle of animation, such as Understanding matrix transformation, linear algebra these, rather than wasting time reading official documents.
2. Reverse engineering
The role of reverse engineering is more than just cracking apps, which in my opinion is more about learning the underlying operating system. In the process of developing the app, we use the system-provided library to invoke the API to implement the requirements, and the process is completely black-box. The goal of reverse engineering is to open the box and use some tools to start with a binary level, which in turn guesses the application developer's code and logic. This will involve a lot of C language, operating system, compiling the principle of things, relatively high threshold. Reverse engineering is also a big value for businesses because they don't want to be seen by rivals and interested in the secrets of their competitors.
The above content can take time to study the expertise. Most of this knowledge is self-made system, there is no longer accumulation of time, it is difficult to get started. This is very important, because a lot of knowledge looks very professional, the threshold is very high, such as I will mention in the next section of this example, but this knowledge I do not encourage learning. The standard is that you learn the knowledge is a knowledge point or a system, if you learn only the knowledge point, then it can only be the entire Knowledge tree branch branches ya, Edge corner angle, if you are learning knowledge system, have the ability to derive knowledge points, that is, I repeatedly stressed the ability of extrapolate.
The above two examples are I think not easy to be eliminated by time, more worthy of research topics. Input in these areas can be understood as linear, that is, a point of cultivation, a harvest.
(c) Full-stack talent shortage
There is no explicit definition of the full stack here, not the front and back end-all is considered full stack. In my understanding, as long as the integration of cross-knowledge points, are all stacks, because the integration of cross-knowledge points tend to produce 1 + 1 > 2 effect. To be small, the whole stack can reduce the amount of wasted time in communication. To be big, the more areas a person knows, the more he can bring these areas together, to think in a higher light, to be a team leader and a fusion agent. This means that the mastery of the whole stack of knowledge on the individual value of the impact of the index situation, the more you know, the faster the value will increase, professional ceilings will be higher.
Many technologies are tied to the business, with the core knowledge that, driven by business needs, it is easy to have a framework. For example, the application of components, many companies have their own components of the library, in fact, the principle is two major categories, but published in the blog, there will be a lot of business background to interfere with the reader's cognition, if the reader chasing this kind of article to see, is very difficult to peel off the business from the framework of interference, direct mining fundamentals. So the big companies out of some of the framework, really not so mysterious, early is a simple basic framework, when faced with business business needs, the use of some reasonable programming ideas, gradually iterative, and finally released a perfect version, can not have to look dizzy after the belittle.
In the process of the previous interview, I also noticed that many candidates are actually interested in technology, often brush the microblog on the article, know a lot. But most of the cases only know it, do not know why. This is because these techniques deviate from your application scenario. In the past I always for the good technology on the micro-blog in the project can not be tangled, and then I suddenly understand that this idea is wrong, I should tap the pain point of the company's project, to Weibo, Google and other platforms on the article to find solutions. So I am opposed to micro-Bo learning, should learn some more general technology, the technology and their own projects to achieve the landing in the project, which is more than reading 10 indefinitely technical articles also works.
(iv) The so-called basic knowledge of large corporations
Why do not recommend the study of a few individual underlying knowledge points, in addition to this knowledge, as well as reverse engineering this self-made system, job seekers as long as the solid foundation, a firm grasp of some basic knowledge can be. Many people will think that the basic knowledge of large companies is very strict, the basic knowledge does not mean the bottom, it is not necessarily simple, they are usually the framework of a layer of encapsulation, so that if you do not think carefully, it is possible to ignore the knowledge, but do not understand this knowledge will have a greater impact on your thinking, It's easy to get into a hole.
Unless it's a freak company with tricky, or incompetent interviewers will only ask what they understand, the normal big company interviews will examine some of the more basic issues, if you still feel that the topic is too low, can only show that the point of view of the problem is not deep enough.
Big companies focus on basic knowledge, in my opinion there are two main reasons: first, in the larger projects, business logic is very complex, so few people have the energy to do a lot of checking and improve the quality of your code, which requires engineers have a fairly solid code skills, both code style or language mastery can not have too many problems. In this way code Review to focus on business checks, code style a stroke, occasionally remind you.
On the other hand, basic knowledge determines the depth of a person's thinking and the point of communication. A programmer who does not know computer background knowledge, the way to see the problem is often wrong, the wrong way of thinking determines that he is difficult to go to the right path, such as a layman friend of mine once took over a GUI implemented in C + +, his first question is "How to make a string bold in C + +", Readers do not have to be ridiculous, because many people do not think very well in the way of the problem, at a high level, experienced programmers, it may be equally unreasonable. The complex business logic of large companies also means that few people will patiently explain to you each noun, such as a hash table, concurrency, parallelism, compiling, linking, and so on, and if you don't understand or understand it correctly, it often means there are some obstacles to communication.
So my advice is: data structure, operating system, the basic knowledge of the computer network must be solid, how solid is not too, because it determines the height of the problem when you look at, depth and ideas.
(v) to replace the GUI with a script
Scripting language is very important, is definitely a productivity-enhancing artifact, I strongly recommend that each client engineer should know some Shell scripts and master Python,ruby and JS in at least one language.
In theory, there is no scripting language to do, Java cannot do, but the scripting language is the biggest feature is fast, fast to the pole of the kind of fast. For some extremely simple small needs, such as counting the average number of a column in a file, I'm sure you won't be too late to open the Java editor until I get the results.
Another feature of scripting language is the high degree of automation, as long as Unix and Linux systems do not die one day, shell scripts will survive forever, the knowledge you learn will never expire, such as awk and sed such artifacts, older than me, still very practical, the next 20 years will not see the elimination of The signs. Ask, what knowledge can not expire in a few decades, and the knowledge that can be used every day is worth learning? Since the Shell is the closest script to the operating system, many complex operations can be automated after knowing it. For example, to find useless pictures in the project, that is, a line of command.
Given the very high development efficiency of scripting languages, many of the frameworks that are insensitive to performance are chosen to be implemented in scripting languages, such as Node,flask,rails,mitmproxy and so on. As a large front-end engineer, can not always rely on the back-end engineer, otherwise the back end can only engage in single-machine mode. So knowing the scripting language and iOS helped us get started with the back-end framework, which is definitely an addition to the application.
Of course, many people will complain that we are IOS engineers, the usual work is not contact with the scripting language, how to learn and put into use. There are three of my suggestions:
1, to organize their own pain points, and try to use a script to solve, which has a magical effect on learning the Shell
2, organize the company project development Pain Point, try to solve with the script, suitable for practicing Python,ruby and JS
3. Discard GUI
The GUI was born to better display information than to be a crutch for technical disabilities. To give a simple example, I find that many people have a lot of programming efficiency tools, such as gitx,sourcetree,tower and other git tools, and what to quickly open the emulator directory, Derived Data directory gadget, I think this is really stupid. The opportunity to learn about Git and the shell is not to waste time on the GUI of a software, which I think is totally unacceptable. Especially for git, I suggest to ask yourself more, learn git or Sourcetree button, in the future, a GUI tool, the life of a few? As for some gadgets, this great practiced hand opportunity, how can you hand over to other software, especially the script can be automated, software is almost impossible.
So long winded said a lot, in fact, summed up there are no points:
1, to learn a technology before you can think about it in the entire Internet system in the current position, what kind of future, will be the personal value of how much improvement
2, data structure, operating system, compiling principle, computer network These basic knowledge can not be lost, it determines you look at the height of the problem, depth and thinking
3, the future needs of specific technical areas of expertise, but also need the full stack, in the final analysis is the need to maximize their value. My personal advice is to master the scripting language to improve efficiency, to get through the front and back, so whether in the outsourcing, unicorn start-up companies or large companies, can independently
4, learn new technology to avoid ambitious or blind superstition big factory, forwarding or the special impression note can not improve their own, to the actual scene, the most important thing is to be able to land!
Here is a small series with some iOS development of learning materials and interview questions, as for other information video I will not all, need to add my new group to collect 711413569
Goose Factory 6 years in-service architect tells you how to become an iOS Daniel developer "Advanced article"