Many programmers' projects often end up half-finished. They have so many good ideas, but many of them remain mere fantasies. Almost every software developer has such a folder, full of unfinished projects, and quite a few of these programs were truly great ideas at the beginning. Like these people, I also have many good ideas, some of which are even what some companies are using now. For example, deciding whether to make profits from e-commerce on eBay or on Amazon, building a business-based social network (plumbing, electronics, software development, etc.), a Bitcoin search engine, developing a CSS framework to replace Bootstrap, finding the most attractive people from Instagram, developing a real-time traffic analytics engine—the list goes on and on. I started almost every one of these projects, but I didn't see a single one completed. When I talked about this topic with my colleagues and friends, they generally reflected that they were the same. Many, many good ideas died prematurely in their folders. Why is that?

Lack of motivation because of success

First, let's talk about our profession, which has an enviably high employment rate. Let the facts speak: the national unemployment rate is about 6.7%, while the unemployment rate for web developers is less than 1%. Also, our salary levels are higher than the average. By 2012, the average annual income of software developers had already exceeded $90,000. Of course, if you are good enough now, you can far exceed this number. Watching the novices learning with me become entry-level programmers gives me a great sense of personal accomplishment. And the pay for this profession also makes them very satisfied: starting salary from $45,000 to $70,000.

So, compared with most other people, especially those who are mediocre at work, just going through the motions, and constantly changing jobs because of low salaries, software developers are still relatively successful. Here, allow me to take the liberty of making a generalization—any resemblance is purely coincidental. It can be said that programmers who switched careers midway are relatively successful compared to these people. It is this sense of superiority from success that numbs our nerves and makes us lack the motivation to accomplish our goals.

Different knowledge domains

We have broad knowledge. We can talk eloquently about how convenient it is to travel between cities. We know how to break a complex problem into small subproblems and solve them one by one. We are truly "world experts," because we can say "Hello World" in any language. Even when faced with thousands upon thousands of calculations, we don't frown, because we understand recursive methods. We know a lot, but is it enough? The great scientist Einstein once said:

Shallow learning misleads people, hence it is dangerous; erudition with arrogance is even more dangerous.

Newton, as everyone knows, was praised as one of the smartest people of that era, able to accurately predict the motion of celestial bodies millions of kilometers away. He said that he could see farther only by standing on the shoulders of giants. Physics was not his only interest; he also left us with precious intellectual wealth such as calculus and so on. From this, one might think that he should also have a good understanding of capital and market operations, right?

1418612268741261

Haha, then you are greatly mistaken! At the peak of the South Sea stock bubble in 1720, all the cash he invested vanished, and he went bankrupt. Because he didn't understand the market, no matter how much knowledge and erudition he had, it couldn't help him at all. Because his fields of knowledge were independent and irrelevant—he discovered the laws of motion of objects, but those laws were of no help in mastering investors' psychology. We are in the same situation. We can spend a whole day explaining algorithms and studying data structures, but we don't understand what users want. When Twitter first appeared, I took it for granted that it was just a fleeting fad. Facts proved me wrong. When we solve problems, we often only pursue whether the solution is attractive, ignoring the secular views connected to the problem.

Constant job hopping

I can guarantee that it is like this in any other major city, but here, I speak only for myself and for my colleagues and friends working in New York. We keep changing jobs. But not everyone is like that. In the comments on an article online, I saw someone who had been in the same position for 19 years. I also noticed that those who are easily attracted to other projects tend not to stay in the same position for too long. It is for this reason that many projects have to be interrupted.

There are many reasons for interrupting a project. For example, you just start a new job and need to devote yourself to the project there, so you have to set the original one aside. Or, because the project you are doing is similar to ones you have done before, you suddenly lose interest. Distance is also a reason, especially if you change jobs every few years, perseverance becomes even more difficult. Here, I need to mention that changing your mindset is important. If you plan to resign after three years, then why not finish your project in three months? If you can maintain this passion, then when you are at a loss in a project, a flash of inspiration will bring good ideas.

Give new life to aborted projects

For one reason or another, I did not let my good ideas "come into being." First, we acknowledged this, then we found out the reasons. Now the third step is to fix them. This is not something that can be done overnight, and perhaps many of my projects will still remain in this half-dead state. Then after thinking for a long time, I finally came up with some steps that can prevent these projects from forever becoming ornaments in folders.

You are the best

First, understand that every project can make you grow—slightly, or in some cases greatly—into a better developer. Skills need to be accumulated over time, so the more projects you develop, the better you become. Use the motivation of learning new technologies, new programming languages, and new frameworks to develop a project; then even if you don't finish it, you can still learn a lot. And if you have other important things to do, you can immediately pause this project.

Build project components

You have developed many projects and become more and more skilled. Do you know this little trick—code reuse? Build modules and libraries instead of rewriting them every time you need to use them. If the project you are working on now is not the last one, then I advise you to build some project components rather than just writing code that can only be used in this project. Write some notes for yourself in the documentation, so it will be convenient to use them in the next project.

Collaborate with everyone

Now that we have good ways to let those aborted projects be reborn, are you itching to have a try? Your idea may be exquisite, as precious as your child, or perhaps worth billions of dollars, but so far—it is worthless. You need to share your ideas with others, and the more, the better. This natural excitement can spur you to keep working on the project and push its development. You can even open-source it and invite everyone to participate. This collaborative approach gives you a sense of mission, keeps you focused, and makes you not give up easily.

Solve the problem at hand

Don't reach for what is beyond your grasp, and don't have high aims but low ability. Try to do something that is truly useful to you. If you are a programmer, then solve programming problems; if you work in a company, then create programs that the company needs. Even on a personal level, there must be some problems that can be solved with technology. So why not take the initiative? Don't wait until problems pile up before solving them. Take one step at a time, and at the same time, you can also get some useful programs and so on. Why not do it?

Don't refuse to do things just because they are small

There is a saying: don't think about starting a company that takes eight months to set up; put your time into things that can be done in four weeks or even less. No matter how simple, release your latest results on a fixed day every month. Doing this gives a strong psychological cue that can motivate your work. Conversely, if you sit in front of your laptop fiddling for eight months wanting to do something earth-shattering, but have no progress at all, you can imagine how frustrated you would be. Quantitative changes lead to qualitative changes; doing small things well one by one may lead to great success. Because the journey of life is a marathon, not a sprint.

Bragging is also a technical skill

Social pressure is real. Rather than working in secret, you might as well tell everyone what you are working on. The feedback you get may help you improve your product. Perhaps you worry that others will take your ideas for themselves, but I can guarantee that absolutely no such thing will happen. Because even a very simple idea is very difficult for others to execute. So there is no need to be secretive. Say it out loud; you can also extract meaningful suggestions from everyone's advice to improve yourself, and more importantly, doing so will force you to implement it. Otherwise, if you brag and fail, you won't know where to put your face, haha.

At this point, it's time to bring this to a close. I wonder if you have learned any tricks that can help your project? Remember: action is the most important thing.