background

This article comes from a post on V2EX, “What are the best books on iOS development that Chinese people recommend?” (Original link). The answers summarized here are basically from lujie2012. In addition, I have also attached some of his discussions with others. The title of the post was iOS book recommendations, but the design went beyond that, and I thought there were a lot of interesting ideas coming out of it, so I wanted to sort them out. After I agree with it, there is the following content, I hope to help you.

The body of the

Recommended books

I started to get into iOS from Object-C before, and I learned to write projects and look for jobs. Because I made the same mistakes that most iOS developers do, not learning more and not growing. I decided to take a deep, serious dive back into iOS and see how far I could go.

I didn’t follow Swift at first, but now Swift is mature, so I decided to learn everything about iOS from scratch. In the following 19 years, I started Swift and learned iOS development for the second time. I also felt that I had broken through the ceiling above my head. I read more than 10 books bought by myself in 10 months and added a lot of knowledge for the business. Sometimes I couldn’t keep up, but I wanted to put the project online. Finally, I overcame the difficulties and made a summary. Now I love reading technical books. The more I drill, the more interesting I find. Like writing a paper, there are no secrets, just go straight to the bottom. Currently, modularize access to Flutter and React Native, the development speed at both ends is different, some functions are done by H5, so we are very busy. The goal now is almost to make Flutter work, basically learning iOS from the beginning again, which took a year to complete.

Some of the books I read during this period are cat-god books in ObjCCn, which are very helpful for iOS development, and the rest are more classic technical books.

I’ve read all these books. (Below is a table of books compiled by the author.)

classification Title:
Objective-C Objective-c programming
Objective-c advanced programming
The Effective Objective – 2.0 C
Swift Swift Authoritative Guide
Swifter 100 Tips for Swift2 development
Swift, advanced
Swift common algorithms
Functional Swift
iOS Advanced programming for iOS database applications
IOS animation core technology and case combat
IOS Auto Layout Development tips
High performance iOS application development
IOS Test Guide
IOS app reverse engineering
LLVM COOKBOOK Chinese version
AV Foundation Development Secrets
Core Data Application Development Practice Guide
Core Data
Other Computer Books The definitive guide to SQLITE
Diagram data structures and algorithms
Data Structure and Algorithm Classical Problem Parsing (Java Language Description)
Data Structure Tutorial
Java 9 programming reference official encyclopedia
Java concurrent programming practice
In-depth understanding of the Java virtual machine
Understand Nginx in depth
Analysis of Tomcat kernel design
C Primer Plus Chinese version
Advanced guide to audio and video development

Also need to add content, tomcat source code, nginx source code, HTTP protocol backend related things. Many things can not be written into books, because there is not much content, some things only have abroad, but 400 yuan, no translation version. For example, in terms of layout, from Frame – “Constriants -” archor- to StackView, Apple is also constantly providing solutions. Currently, the best layout solution is StackView + Anchor + Constraint. However, there is no such book to introduce these contents, so I also looked through the official documents and saw clues in the respective projects to think about the comparison.

Other Ways of learning

As an old saying goes, the best source is apple’s official developer documentation, the official WWDC Session. To get a better understanding of apple products, I’ve looked at WWDC over the years. From iOS6 in 2007 to the release of the iphoneX in 2017, there are almost 100 videos a year that introduce the latest technologies and solutions, and the content is very high. Haha, I learned a lot of advanced usage of Apple products and experienced a lot of product introductions.

IOS developers should definitely check out Boxue, buy a lifetime membership if you can, download the blogger’s app, watch his project architecture, and learn from the videos. I boxue completed 156 iOS videos for lifetime membership. After watching the video of Boxue, I can understand a little bit. After watching it for a while, I can understand a little bit more, such as RxSwift, Protocol and Sequence. In addition, you can combine the three books of meow God in ObjCCn, which I bought and read together. It will make your writing and application of Swift more advanced, and make your thoughts closer to apple official or Bull. Popular concepts such as serialization, persistence, and functional programming can be brought into the project.

Sincerely share experience, only 30% of the technology can be seen in Chinese books, 50% can be seen in English books, and 50% can be seen in official English documents, everyone must learn English well, and find first-hand information and solutions in the official. Gradually you can become a Contributor, contributing code and solutions to the community, and become a Contributor. Otherwise, it is always just a spectator, playing with technology, hoping to play it to the extreme, right? Like playing with music, playing with the realm of music can see Vista 2002 concert.

In addition, what is the most difficult to learn above, is the English level !!!! I now study English every day, English level up, feel the engine power bar. Secondary knowledge is basically outdated, want to become first-class, then the English level has to first-class, almost IELTS 7 points this level. Write code to see data, feel not a level oh.

English-bell.com.tw/default.asp… . I have been studying DME for 25 minutes a day. Now I have been studying for 300 days. I recommend buying Longman contemporary +DLL ebook + English Bell and using SKype for classes.

More discussion

If you haven’t learned iOS without using CoreData, or Sqlite for persistence, it’s almost impossible to become an advanced programmer. CoreData is difficult to use and learn, but I personally think it must be learned patiently and used in every project. The design ideas and theories in CoreData are very useful. Every year, WWDC has session to explain this part.

There are not many books on iOS itself, but more need you to refer to official documents to understand and learn. There’s a lot of stuff about view drawing technology, audio, networking, which is pretty basic stuff, but apple doesn’t teach you, they don’t teach you, they just use the Apple API, they never really know the surface. Think iOS side has nothing, in fact, there are many things, such as socket programming, any language can be implemented, any platform, but iOS did not tell you this is very important, you do not learn, do not go deep, call the API is good. In fact, this is the real technology, and then deep digging is TCP/IP protocol, Bluetooth protocol, learning programming should learn this? Learn iOS to learn these, certainly, do programmers, do not learn these will always stay in the middle level, 35 years old waiting to be eliminated.

When you learn the basics, such as layer 7 network protocols, you can see what technologies and languages start with binary. Byte encoding, becoming Unicode, becoming language. So what happens when you write code in language? The written code becomes assembly language, command, and then binary. The user installs the binary, and then the binary becomes code in the runtime environment, and then the logic is executed. Do not understand the principle of the compiler, how to optimize the code, how to do security hardening, anti-hook?

In this way of thinking, HTTP to data presentation is one of the easiest programming tasks. Recently I’ve been thinking about all kinds of data communication, such as the remote control of the TV at home, how to do data interaction, conversion, transmission. Light wave, infrared, wifi, 5G, imagine the lowest level implementation and full path thinking is interesting. So, although the calculation of undergraduate education water, but now think of the filter and modem used at that time, do not know what to do on the model electricity, now work, slowly understand, this is the essence and role of undergraduate professional education. Systematic education is meaningful, why learn high number, now just how much understand some.

By the way, do you know anything about encryption? HTPPS how to implement do you know, read the source code implementation? Programmers who don’t know encryption are really not advanced programmers. OpenSSL library, you can play for a long time. IOS and Android are just a platform encapsulated by their respective technologies to solve certain problems. When you get to the bottom of what a platform is really about, then you will also know that the evolution of technology follows similar patterns.

As an aside, is there a way out for iOS? The ceiling is low when you play it like an HTTP + page, but when you start with iOS and you study the entire system, the ceiling is infinitely high. Over the next 20 years, leading technology and advanced applications will largely be mobile-led revolutions.

Don’t think that the iOS development ceiling is very low, iOS post is also very fine, you can play log system, buried point system, push system, crash system, socket chat system, real-time online system, video system, camera system, geographic location system, 3D system, AR system, sound system, security system. There are so many things to play! No food? No future? Most people are post driven and project driven, so am I. There is no progress without problems. But you still have to be self-motivated to keep pulling up to get closer to that highest ceiling.

It’s like playing music, writing songs, composing songs. You can put together anything you want. It’s basically advanced talent. Just like writing code, play with it, play with technology, or you wasted all those years of education. As for business and technology, I personally prefer to be a technical expert when you have accumulated a certain level of skills. Who are the role models? JSPatch’s author is a role model, dug up to ants. Time is equal to everyone. Don’t reinvent the wheel, iterate on your skills and keep thinking. Read the lowest book, think about the lowest principle, you will not be confused.

Question and answer session

Q: Are there any particularly good scenarios to use with CoreData? I’ve been doing this for five years using SQLite.

A: The biggest benefit of CoreData is their design ideas and structure, you can buy CoreData Application Development and Practice + CoreData to see. I also read these two books to understand the real meaning of CoreData, but it also has a big flaw: no encryption !!!!! Most projects use Sqlite for encryption! CoreData is also Sqlite, which is a wrapper around Sqlite. If you think about the mobile phone album of more than 10,000 photos, their storage and retrieval, do not know album, many official apps should use CoreData to achieve. Can play CoreData, definitely can play Sqlite. It’s best to use it in a project, and you’ll get good at it. Sqlite makes version management and migration more convenient, direct SQL operation database. My advice is to learn and use both.

Q: I’ve also been learning about the front end and iOS to build up my skills as an indie developer. But I never looked into the deep technical principles behind CSAPP (Computer Systems A Programmer’s Perspective) Deep understanding of the computer system) including the operating system related to the book I read at least three times, but these basic half dime relationship with IOS development all have no, because the APP with operating system principle, at least from the far distance, another is not with the underlying knowledge, independent development are mostly business driven, With the exception of special algorithmic scenarios such as audio and video, most of the technical requirements are business-driven UI interaction and business computing.

A: Not to argue, I wanted to illustrate the general programmer and advanced programmer approach to problem solving. Learning the 7-layer protocol is not about building wheels, it’s about knowing the source of water. Interest is the best teacher, curiosity is the best power. React, Weex, React is not not able to write API documentation look, component module use, market what kind of APP can not handle? But performance optimizations, advanced features, you don’t have enough power to do it? At present, the front-end spends a lot of time on UI development, and the back-end needs algorithms. If you don’t supplement your knowledge, then the so-called big front-end ceiling is of course low. Ali front end high P more or back end high P more, of course is the back end high P more ah. Whichever direction the most important thing is to become an expert. Surely it is not enough to be an expert to see only the knowledge within the scope of one’s own project, and not the front-end to see the back-end knowledge? I have read tomcat, Ngnix, Spring source code, of course, also forgotten, but I just want to know how to establish data channel, HOW to maintain TCP. Google is found the current protocol does not work, their own protocol, encryption algorithm, HTTP2 communication, message protocol, TCP protocol, it dares to innovate and practice. At present I relative business and money, I pay more attention to technology, can only apply technology is the majority of people, but to become an expert only a few people can do, because it has to learn a lot of things oh.

So for example, Rx is this thing, Java has RxJava, JS has Rxjs, iOS has RxSwift. Now each platform is taking good designs and wheels from the other, and the programming and design ideas are the same. But because of the programming language and the business nature of the platform, there is no opportunity to touch something better. Then you need to break through the restrictions provided by the official, and use programming ideas to design and restructure your own projects. If only content with the basic use of language, do not master the language, understand the logic behind, then will never enter the programmer door.

Mobile Internet hot time, training training can work, take a high salary. But a high salary should not be the only reason why you become a programmer. The essence of the Development of the Internet is that technology combines business and eventually brings economic prosperity. Technology is always the first driving force. And programmers are creating technology, using technology, driving the Internet prosperity of the most critical part, as the tide of this era we should be very proud of it.

My personal plan is to learn English + development, while becoming a senior development, constantly improve my English level and broaden my vision. Southeast Asia, the overseas market is not without opportunities. Of course, in the current giants of the environment, you do it alone, that affirmation of a spray did not.

Q: Now the cost of APP is too high, and small and medium-sized companies don’t pay much attention to it. In addition, with the same three years of experience in back-end, front-end and mobile terminals, iOS may be relatively unimportant. You said you can only write the application layer? General company is originally oriented to business programming, can solve business problems, mobile terminal general company which tube you so many technical problems; There is a more serious problem, is generally to interview iOS companies, the atmosphere of building ships interview is too heavy, most of them are not a UI boy, recognize the reality, I have met other technologies, much better than iOS.

A: Every company developing an APP wants to build an aircraft carrier, and that’s true right now. That’s why I recommend that if you’re doing iOS or mobile development, you have to learn by yourself and break through your limitations. I worked with a colleague on iOS before he switched to JAVA and got a promotion. But I always think that the technical solution and technology of our project are not strong enough. It is not that there is no business, But the business is very good. However, I feel that the development rhythm and technical system of mobile terminal are too fragmented. For such a reality, we definitely need to improve ourselves to solve it, rather than waiting for opportunities. Hence Weex, React Native, and Flutter, technologies that quickly solve hot deployment at both ends, freeing up the UI.

No more discussion, read the Flutter documentation. IOS no one wants, certainly, the premise is that you really love to write code, can analyze problems, solve problems, understand the nature of programming, proficient in OC, Swift language, skilled in all the API and details of an APP. Just like the camera, you can only find a high Star library on Github to use, then you will never understand apple’s original API design ideas, can not do what you want to use. I hope you have time to think more, want to be an excellent programmer, magnified to say that want to be an excellent person, is the need to continue to learn, continue to grow, everyone come on!