A Review of My First Year and More at Baidu

I haven’t written a blog post for a long time since May. This time I’ll just jot down a few things. Coincidentally, today is also Programmer’s Day, which is kind of interesting.

Chromium

In mid-August last year, I officially joined Baidu. Over the past year, I’ve been working on mobile network optimization. During the first half-year, I explored how to perfectly simulate weak-network conditions on mobile devices, and built what was essentially an independent project, WNR. After that, I spent most of my time making a living off Chromium. Roughly speaking, the work was to extract its network protocol stack and use it as a network library for Android/iOS, then add the customizations we needed on top of it, such as HTTP DNS, long-connection keep-alive, SSL handshake optimization, etc. To be honest, these things are interesting in themselves. Mogujie is doing it too (though it feels like the company is about to collapse). If you do it seriously, you can produce a lot of results, because although the Chromium ecosystem is very mature, it covers too broad a surface area, so there are truly abundant angles to dig into. But as for me personally, while Chromium’s architecture and design philosophy are outstanding and studying it is genuinely interesting, once it comes to actual development, in most cases you’re constrained by the existing framework. It rarely has that “get your hands dirty” feeling I had when developing the weak-network simulator, and I feel that kind of challenge is what brings passion to work. All in all, I may really not be suited to continue developing in the networking direction. In particular, I’ve started to resent work on the mobile side.

About Mobile

Part of the reason may be that I’ve never really liked the app development domain. Objectively speaking, whether or not it truly still represents the future, it at least dominates the present. So there’s no denying that, at the moment, aside from deep learning, this is the field where money comes fastest and in the largest amounts, with a low barrier to entry—as long as you pick the right direction. In fact, I like being a user and judging an app’s engineering quality; when something annoys me I can directly flame the PM for having mush for brains. But I don’t want to spend my own energy satisfying the “good experience” demands of picky users like me. In reality, I’ve completely lost the strong motivation I had half a year ago to turn Nuomi into a truly highly available product—this is due to a number of reasons, the most important being that I’m not as poor as I was back then. When I go out to eat, it’s not like I always have to use group-buy deals anymore, so I don’t really use Nuomi much either, except that I still support it when buying movie tickets.

Thoughts on Network Optimization

On the other hand, as I learned more about the characteristics of mobile Internet networks, I found that network optimization itself has a ceiling: it’s constrained by protocol-stack design and physical properties. No matter how you optimize at the application layer—whether it’s multiplexing, image compression, resource inlining, and so on—TCP underneath still suffers from head-of-line blocking; once there’s packet loss, the speed just collapses miserably. And the QUIC pie is not something everyone can have in the short term. From a scenario perspective, for example in a crowded shopping mall, no matter how much we optimize, we still can’t force the user to somehow grab a channel. And if you can’t do that, then no matter how magical the network library is, it can’t make the user connect to the network. Thinking about it, this is really worse than the Symbian era. Back then we had a god-tier feature: base-station locking—everyone who used it said it was great. So in fact, what a network library can do is only to improve efficiency as much as possible: reduce requests, reuse connections, reduce hijacking, and so on. Essentially these are icing on the cake, not help in the snow. So although there’s a lot one can do, I’ve gradually lost the motivation to do these things.

Leaving Soon

These past two days, I’ve basically finished the handover. Friday is the last day. Looking back at the documents and code left behind, it feels like I’ve really done quite a lot over these past six-plus months spent on Chromium. From my first contact with this massive codebase, to figuring out the build system, to being able to deeply understand the code framework and design ideas, and then modifying the code to achieve effects according to my own thinking—throughout this period, my biggest motivation was really the process of finding and trying to solve problems. But now the project has already entered a steady track. There aren’t that many problems hidden in layers of fog anymore, and I’m not responsible for new features. Put bluntly, even without my work, the project probably wouldn’t be affected that much. So maybe it’s time to choose based on personal interest…

A New Direction

Overall, I’m personally good at math and physics, and they’re also my interests—this hasn’t changed for years. However, my math skills have declined extremely noticeably compared to before. This past year of work in computer networking hasn’t been very related to my major. In comparison, I still hope to work in performance optimization and numerical computing. So the new position is software R&D for heterogeneous computing at INF, which should also be the R&D direction I’ve formally chosen to explore in depth. One place where it suits me is that work in heterogeneous computing has a large number of deep holes waiting to be filled, and it’s about creation rather than patching—so that’s what attracts me the most. Yes.

comments powered by Disqus
Published:
2016-10-24
Category:
Tag: