This is the script I prepared for the "2008 Software Development 2.0 Technology Conference" which began on December 4th. When I arrived at the venue, I realized that this script was not suitable for the nearly one thousand technical experts present, so I had to give a temporary talk on the trends of mobile internet instead.
Five Suggestions for Beginner Programmers
Every IT company, especially startups, is very troubled by the fact that they can't find good programmers. Nowadays, universities, software colleges, and various training institutions produce hundreds of thousands of programmers each year, and every graduate has the same problem: they can't find a good job. So where exactly does the problem lie? In fact, what companies need are not just people who know how to write code; they need people who can hit the ground running, especially those who can do their jobs well. However, most new graduates have only just learned how to write code and indeed find it difficult to meet the needs of enterprises.
What kind of programmers do companies really need? How can a beginner programmer become the expert that companies desire? Many programmers have also asked me, "What skills do I need to start my own business?" I've been pondering these types of questions for a long time. I've written code for ten years, managed a team of over a thousand developers at Kingsoft, and am currently doing angel investing. After careful consideration, I have summarized five suggestions to share with all programmers.
Suggestion One: Only those who truly like programming can write good programs.
Liking to write programs makes being a programmer feel like heaven;
Not liking to write programs makes being a programmer feel like hell.
Programmers need to spend all day in front of a computer, often working around the clock, and it's extremely hard work. There’s no room for falsity in the work—missing even a single punctuation mark isn’t acceptable. Those who like it find life very enjoyable, feeling a sense of achievement with every line of code they write, especially when their work is widely used. They naturally feel a sense of pride. On the other hand, those who don’t like it find sitting in front of a computer unbearably boring, suffocated by deadlines, and constantly frustrated by finding and fixing bugs.
Only those who like it, only those who are passionate about it, can write good programs!
I suggest that those who don't like writing programs switch careers early on, without forcing themselves, so as not to waste both their own time and others'.
Suggestion Two: Treat your program as an artwork, and write code like you're composing poetry.
Nowadays, fewer and fewer companies perform code reviews (checking the code at the code level), so many people hastily complete their tasks under the pressure of deadlines, considering it done as long as the tests pass. On the surface, the development speed seems fast and the schedule is secure; but in reality, such code is difficult even for the developer to understand. Once there's a bug, it's hard to debug, and future maintenance and upgrades will be very difficult. Such code usually ends up needing to be rewritten, leading to significant waste.
If everyone treated writing code as creating an artwork, carefully and cleanly writing each line, though the speed might be slightly slower, the overall development cost would be much lower.
How to write code that is as beautiful as poetry? The method is actually quite simple.
1. Buy several classic programming books, rewrite all the examples in them, compare each one with the examples in the book, and gradually improve your programming style and techniques. Over time, you'll naturally be able to write code as good as the examples in the book, or even better.
2. After mastering the basics, read the source code of system-level programs like Linux to see how experts write code.
3. Thoroughly read all the materials on MSDN. As the saying goes, "Having read ten thousand books, one writes as if inspired by the gods."
Also, always remember the iron rule of software engineering: wherever there may be errors, errors will occur. Initialize every variable, check the validity of every parameter reference, and conduct boundary condition checks wherever there may be errors. Programs developed in this way will definitely be more stable, and if errors do occur, they will be easier to fix. Self-taught experts generally develop quickly but end up with many bugs after completion, requiring long periods of debugging. True experts, however, aim for bug-free code.
Suggestion Three: You must write at least 100,000 lines of code; don't harbor any illusions.
A programmer is like a carpenter—practice makes perfect. A programmer must write a sufficient amount of code to gain a feel for it. This is hard work, with no shortcuts available.
Computer science is a practical science. Without hands-on ability, it's difficult to achieve good scientific research results. One of my senior classmates, a Ph.D. from Carnegie Mellon University, said that every Ph.D. student there must write 100,000 lines of code to graduate, and Carnegie Mellon Ph.D.s can basically join any large enterprise without an interview. However, most graduate students and Ph.D.s in China lack strong hands-on abilities.
Without having written enough code, it's impossible to become an expert—you'll only be able to theorize!
Suggestion Four: Always maintain curiosity.
Computer technology evolves rapidly, with new technologies emerging every year. In my past career, I've used programming languages such as Basic, MASM, Pascal, C++, VBA, Delphi, Java, etc. To stay ahead in the next few decades of your career, you must always maintain curiosity and continuously learn new things. You should understand why many experts use iPhones, and why they are always eager to try out Google Phones.
Human energy is limited, and experts often face high work pressures. How to keep up with industry dynamics within limited time is not an easy task. My experience is to regularly read various technical magazines in the industry, participate in various gatherings, and save a lot of time. Most importantly, make friends with some knowledgeable technical experts, communicate with them frequently, and you will certainly benefit greatly!
Suggestion Five: Don't limit yourself to technology alone; pay more attention to users.
By following the above suggestions, you would already be considered a rare expert. But a true expert must know what users need and how to create products that satisfy them.
Software development increasingly emphasizes team collaboration. Many teams now have dedicated engineers for requirements analysis, user interface designers, and user experience designers, making the division of labor in software development increasingly detailed. Many programmers think that as long as they focus on the technical aspects, they don’t need to care about user needs and user experience. In reality, requirement plans and interface designs cannot be written in great detail, and the actual implementation still depends on the programmers themselves. At this point, the difference between good and bad becomes apparent quickly.
Our ultimate goal in writing programs is to meet user needs, not simply to complete the functions listed in the requirement planning documents. Therefore, programmers must carefully consider user psychology and understand their real needs.
Secondly, how to design an interaction interface so that users find it easy and comfortable to use involves a great deal of knowledge. For example, every program window has three buttons in the upper right corner, such as minimize, close, etc. Jobs thought they looked ugly and were inconvenient to use, so he suggested changing them to red, green, and blue traffic lights. After this modification, Mac OS became significantly more beautiful and user-friendly.
Currently, application development for the Internet and mobile phones strongly emphasizes small-team R&D. This model speeds up the development process, but requires higher comprehensive qualities from programmers.
I strongly recommend that programmers not limit themselves to technical expertise but also spend more energy considering issues related to users, learning to discern user needs, and striving to design products that are easy and enjoyable to use. Programmers who excel in this area have a high chance of succeeding in entrepreneurship.
These are the "technical excellence" requirements mentioned in the "Ten Standards for Entrepreneurship" that I discussed.
Such technical experts, if they capture the right product direction and possess certain leadership skills, have a great chance of succeeding in entrepreneurship! In fact, the founders of most technology startups are such people! 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 Spent Writing BITLOK"
"Bright Sunny Days"
"Five Suggestions for Beginners in Programming"
Source: iResearch, Author: iResearch Expert - Lei Jun