I’ve always thought that for a programmer, writing code for a day is nothing, maybe it’s just fixing a bug, or not fixing it at all. A week’s time to learn content page is limited, may be one or two puzzle knowledge point finally understood, may also be a new knowledge point. But compared with a month ago, I always feel that I have made a lot of progress, and compared with a year ago, I have a completely different feeling. As 2015 is coming to an end, I think it is necessary to summarize the gains and losses of this year.

Start with white

I have been working on my first iOS app since I started writing for iOS at the end of last year until around March or April. Now I look back on my blog during that time, which is mainly about THE SUMMARY of UI and some common mistakes and solutions. In the process, I learned how to handle HTTP requests and Json parsing (yes, I didn’t know what HTTP requests were), asynchronous loading and caching of images, and UI controls like UIScrollview and UITableView. Also began to contact timer, memory management and other knowledge. After the APP was released, I naively thought I had learned enough about iOS.

First failure

In May, I did two small projects, one APP was put on the shelves (the advertisement earned nearly 200 yuan), one Xcode plug-in was put on Github, and then I went to meet a company with enthusiasm. The salary is 12K+ package food and accommodation, although I did not feel that I reached this level, but when I was rejected in the second round, I still felt a little sad. Although the interview did not pass, but there are still some gains:

  1. I gradually moved into googling, followed objc. IO and RSS feeds to all the big tech blogs, and occasionally asked StackOverflow questions. In general, the level has been raised, and the sources of knowledge have been broadened. This has served me well to this day.

  2. As for some details of UI, when I was working on a project before, I just wanted the effect to be OK. When the interviewer asked me how to deal with the stretching problem of pictures, I had no idea at all. In addition, some low-level knowledge, such as CoreGraphis and CoreAnimation, was also lacking before.

  3. Used to just talk about THE MVC pattern, in the actual code VC takes care of everything. I was asked the right question by the interviewer. Now I strictly follow the MVC pattern, and have learned the MVVM pattern. I have written several articles analyzing the source code of ReactiveCocoa: A detailed explanation of ReactiveCocoa. Unfortunately, I am not familiar with the idea of functional programming, so I temporarily shelved it after using it once or twice in the project. I heard that Meituan is using RAC.

Fail the second time

After the interview, I summarized the problems encountered in the interview process and sent a resume. Maybe it was lucky that I was asked several questions I had prepared, or maybe the startup company was short of staff, so I successfully got the Offer. At that time, I talked about 400 days, but later I worked overtime at night, finally I got 440 days (I was a little proud when I earned more than 10,000 yuan a month in my sophomore year). I started to work in June, but the problem came faster than the salary. Here are the main points:

  1. Not adapting to changing identities. The enterprise is the enterprise and the school is the school. In the school team, I am the technical leader and also the product manager. Set your own requirements and implement them. However, in the company, the requirements of product managers change three times a day. When the code is finished, the leader sees the technical implementation, the product manager sees the effect, and the artist checks the UI layout. Because the foundation is too not solid before, the attitude is also more perfunctory, so come so loopholes, take care of one and lose another.

  2. Mentality is not good enough. At the beginning, I was very energetic, but I was always criticized by the leader and the PM changed my demand. Later slowly also some disappointment, even is repugnant. The process is quite complicated, and it is not clear to this day.

Generally speaking, there are two reasons for the second failure. One, I was not technical enough, there were code specification issues and iOS development issues, and two, I was too self-centered, if I had thought more from the company’s point of view, maybe it would have been different. Later, the relationship with the company became worse and worse. Finally, I chose to quit early in September and went back to school to study technology.

I didn’t look at technology for two months after I went back to school. Semi-voluntary resignation made me start to doubt myself. Although I was angry with the leadership and atmosphere of the company, after all, my own problems were more serious. So he chose to escape, playing games, watching movies and even taking a trip to Dalian every day. I went home for a period of time and went back to school in November. I felt that escape was not the way, but I still had to learn a little bit.

Reading a book

15 years of reading a lot of good books, a lot of income. During the internship, I finished Effective Objective-C 2.0 and Objective-C Advanced Programming, and gained a deeper understanding of many basic knowledge, such as ARC, block and GCD.

During the internship, I also read a book called “Old Code says Programming to Play Swift” when Swift was still the 1.x version. In that sense, I was a bad intern. During the internship, I read books on the road and at night, resulting in a lack of energy during the day. At that time, the idea was to use internships to learn more skills, but startups actually required interns to create profits for them.

In November, I read “Self-cultivation of Programmers” and had a more thorough understanding of the operation of programs and operating systems. After reading it, I wrote a review. Swift 2 open source in December, I feel Swift is the trend, so I began to learn “Advanced Swift” published by OBJC, and I also wrote its Chinese translation. Later, someone reminded me of copyright issues, so I have suspended the original translation, and the following several articles are obtained after processing and summarizing the original text.

I gained a lot from reading and translating English books. My understanding of a lot of knowledge is much deeper than that of reading Chinese courses directly, and my ability of reading English courses is also greatly improved.

harvest

The biggest gain is learning Swift. While understanding the basic syntax, I also have the opportunity to see the implementation principle of the open source part.

I cut down a lot of time on writing projects, hoping to build a solid foundation of knowledge, because many bugs often come from a wrong understanding of a concept. Rather than trying to solve a bug, learn the knowledge first. So while reading, I also began to think deeply about some basic knowledge of iOS development:

  • Combination of AutoLayout and UIScrollview
  • UIScrollview performance optimization
  • The GCD and NSOperationQueue
  • UIView life cycle
  • Similarities and differences between Swift and OC when copying objects
  • Similarities and differences between Swift and OC closures

Thanks to various sources on Google, I made my own Xcode plugin to count all lines of code written in Xcode and how long it took to write it, but there seem to be hidden bugs and I don’t maintain them later. Because read “programmer self-cultivation”, have a shallow understanding of some of the underlying knowledge, so with the help of Google, oneself cracked a charging application: a digital magic – cracked Mac software tour

Come to think of it carefully, I have also learned a lot of other chaotic things. During my internship, I spent a long time in C++ projects, and wrote a static library to call OC and Java respectively, so I have a little understanding of C++. I found a bug in CSDN blog, learned Python, and wrote a script to brush my score to the first. The school has Android class, so I had to write an Android app, also kind of understand some simple Java and Android development. At the end of the year, I registered the domain name BestSwifter and set up my personal blog. Although I was doomed to be slapped in the face, I also hoped to inspire myself.

Plans for 2016

  1. Continue reading and translating English books. Advanced Swift has completed two thirds of the translation, which is expected to be completed in January. The next target might be Objc’s book: Core Data. In fact, there are always good books to read.

  2. Read great blog posts. In fact, a lot of time in 2015 was wasted on some low-quality articles, which not only failed to learn knowledge, but also made me confused. NSHispter and Objc.io have plenty of good articles to read in 2016.

  3. Technology and foundation. Some knowledge points haven’t been learned yet, some knowledge points have been learned but have been forgotten for a long time. At present, I think of these points: responder chain and event processing, KVO, comparison of several messaging mechanisms, Runtime, NSUrlSession, CALayer and so on. Although there is too much to learn, but always like a sentence: “fear what infinite truth, into an inch of joy.”

  4. During college, you should do what you should do in college, like read books. At present, I think of “Code Clean Way” and “Schematic TCP/IP Protocol”. If I have time, I hope to have a deep understanding of Mac and iOS operating system.

  5. An internship. Now I have a certain understanding of start-up companies, and I hope to have an internship in a large company for several months.

Although the task is huge and complicated, but always try to complete, I hope a year later and now a different person!