编写一款软件要懂哪些