Programmers like this have a chance in startups.

by loqojo on 2008-12-27 22:07:15

This is the script I prepared for the "2008 Software Development 2.0 Technology Conference" which began on December 4th. Once I arrived at the venue, I realized that this script was not suitable for the nearly thousand technical experts present, so I ended up giving an impromptu speech on the trends of mobile internet instead.

Five Suggestions to Programmers Who Are Just Starting Out

Every IT company, especially startups, is very troubled: they can't find good programmers. Nowadays, universities, software colleges, and various training institutions produce hundreds of thousands of programmers each year, but every graduate has the same dilemma: they can't find a good job. So where's the problem? In fact, what companies need are not just people who know how to write code; they need people who can get the job done right away, especially those who can do it well. But most newly graduated college students have only just learned how to write programs, making it indeed difficult for them to meet corporate needs.

What kind of programmer does a company really need, and how can a beginner become the expert that a company requires? Many programmers have also asked me, "What kind of abilities do I need to start my own business?" I've been pondering similar questions. I myself wrote code for ten years and managed a team of over a thousand developers at Kingsoft. Recently, I've also been doing angel investments, carefully summarizing the following five suggestions to share with all programmers.

Suggestion One: Only Those Who Truly Like It Can Write Good Programs

Liking to write programs makes being a programmer heaven;

Disliking to write programs makes being a programmer hell.

Programmers need to be hunched over their computers all day, often working around the clock, extremely hard work, and there can be no faking it in this field—missing even a single punctuation mark is unacceptable. People who like it find great joy in it, feeling a new sense of achievement with each line of code written, especially when their work is widely used, a sense of pride naturally arises. Those who don't like it find sitting in front of the computer unbearably boring, pressured by deadlines, and constantly annoyed by finding and fixing bugs.

Only those who like it, only those who love it, can write good programs!

I suggest that those who don't like writing programs change careers early, don't force themselves, to avoid harming both others and oneself.

Suggestion Two: Treat Programs as Art, Writing Code Like Poetry

Nowadays, few companies do code reviews (code-level checks on completed programs), so many people under the pressure of deadlines hastily get by, considering the task complete once testing passes. On the surface, development speed seems fast, and progress is assured; but in reality, such programs are difficult even for the developer to understand, and once a bug appears, debugging becomes very challenging. Future maintenance and upgrades will also be very difficult. Such code usually ends up needing to be rewritten, causing significant waste.

If everyone treated writing programs as creating art, writing each line carefully and cleanly, though slightly slower, the overall development cost would be much lower.

How to write code as beautiful as poetry? The method is quite simple.

Firstly, buy several classic programming books, retype all the examples in them, compare each one with the examples in the book, step by step improving your programming style and technique. Over time, you'll naturally be able to write code like the examples in the book, or even better.

Secondly, after having a solid foundation, read through the source code of systems like Linux to see how experts write it.

Thirdly, thoroughly read all materials in MSDN, then “after reading ten thousand volumes, writing comes naturally.”

Also, always remember the iron law of software engineering: anything that can go wrong will go wrong. Initialize every variable, check every parameter for validity, and perform boundary condition checks wherever errors might occur. Programs developed this way will certainly be more stable, and if errors do occur, they will be easy to fix. Self-taught experts generally develop quickly, but after completion, there are many bugs requiring a long time to fix. True experts, however, aim for bug-free code.

Suggestion Three: Must Write Ten Thousand Lines of Code, No Shortcuts Allowed

Programmers are like carpenters, practice makes perfect. Programmers must write enough lines of code to gain a feel for it, and this is hard labor with no shortcuts.

Computer science is a practical discipline; without hands-on ability, it's difficult to produce good research results. A senior classmate of mine is a Ph.D. from Carnegie Mellon University, which is world-renowned for its computer science department. He said every Ph.D. student must write ten thousand lines of code to graduate, and Carnegie Mellon Ph.D.s rarely need interviews when entering large companies. However, most domestic graduate and Ph.D. students lack hands-on ability.

Without writing enough code, it's impossible to become an expert, only capable of armchair theorizing!

Suggestion Four: Always Maintain Curiosity

Computer technology evolves very quickly, with new technologies emerging every year. In my past career, I've used various programming languages including basic, masm, pascal, c++, vba, Delphi, java, etc. You must always maintain curiosity and continuously learn new things to stay relevant throughout your decades-long career. You should understand why many experts use iPhones and are always eager to try out gPhones.

People's energy is limited, and experts often face high work pressures. How to keep track of industry dynamics within limited time is indeed not a simple matter. My experience is to frequently read various technical magazines in the industry, attend gatherings, which can save a lot of time. Most importantly, make friends with knowledgeable technical experts, communicate with them often, and you will surely benefit greatly!

Suggestion Five: Don't Limit Yourself to Technology, Spend More Time Understanding Users

By achieving the previous points, you're already a rare expert. But a true expert needs to know what users want and how to create products that satisfy them.

Modern software development increasingly emphasizes teamwork, with many teams employing specialized demand analysts, user interface and user experience designers. The division of labor in software development is becoming finer. Many programmers think they only need to focus on the technology and don't need to worry about user demands and user experience. In reality, demand plans and interface designs cannot be written in great detail, and the actual implementation still falls to the programmers themselves. At this point, the difference between good and bad quickly becomes apparent.

Our ultimate goal in writing programs is to meet user needs, not simply completing the functions listed in the demand planning document. Therefore, programmers must carefully consider user psychology and understand users' real needs.

Furthermore, how to design interaction interfaces so that users find them easy and pleasant to use involves a great deal of knowledge. I'll give a small example: every program window has three buttons in the upper right corner, such as minimize, close, etc. Jobs thought they were unattractive and hard to use, so he proposed changing them to red, green, and blue traffic lights. After this modification, Mac OS became significantly prettier and easier to use.

Currently, application development on the Internet and mobile devices emphasizes small team development. This model speeds up the process significantly, but it also raises higher requirements for the comprehensive qualities of programmers.

I strongly recommend that programmers not limit themselves to technical skills but spend more time considering issues related to users, learning to discern user needs and striving to design useful and easy-to-use products. Programmers who can achieve this have a good chance of succeeding in entrepreneurship.

These are the "technically proficient" requirements mentioned in my "Ten Standards for Entrepreneurship".

Such technically proficient experts, if they can identify the right product direction and possess some leadership skills, have a great chance of succeeding in entrepreneurship! In fact, most founders of tech startups fall into this category! For example, Zou Shenglong and Cheng Hao of Xunlei, He Xiaopeng and Liang Jie of UCWEB, etc.

Programmer Series:

"My Ten Years as a Programmer"

"The Seven Years I Wrote BITLOK"

"Bright Sunny Days"

"Five Suggestions to Programmers Who Are Just Starting Out"

Source: iResearch Network, Author: Expert of iResearch Network - Lei Jun