How to deal with the ever-changing software technology
The technology in the software industry is changing rapidly, so people engaged in software-related work should always pay attention to the birth and development of new technologies in order to keep up with the technological trend. So how should we treat this situation? This paper gives some opinions. What's your attitude towards the ever-changing new technology? I will learn about new technologies when I meet them, but I won't put a lot of energy into them (such as NoSQL, Node.js, etc.). These technologies are not mature yet, just need to keep up. More than ten years of technology may be a threshold. Some people say that technology is changing with each passing day, but I don't think so at all. Although immature technologies are constantly emerging, mature technologies, such as Unix, 40 years, C, 40 years, C++, 30 years, TCP/IP, 20 years, Java, have been around for nearly 20 years ... So, if you focus on mature technologies, there are not many. My view is that to understand technology, we must understand the historical development and evolution of the whole computer technology. Because, you have to go towards the trajectory of the ball, not towards the position of the ball. To know the trajectory of the ball, we must know how it ran in history. If we want to straighten out the context of a technology, the emergence of Unix in the 1970 s is a milestone in software development, and the C language in that period is also a milestone in language. All the projects are on Unix/C, and people all over the world are writing software with these two things. Linux follows Unix and develops UNIX, and Windows is also C/C++. At this time, the emergence of C++ is naturally accepted by everyone, and enterprise-level systems will naturally migrate to it. Although C++ took over the baton of C, its problem is that it has no enterprise architecture and is too casual, otherwise there would be no Java today. C++ is very close to C, it is only an extension of C, and there is no enterprise architecture framework for many years. After the invention of Java, IBM took over the requirements of enterprise architecture. The emergence of J2EE makes C/C++ stretched. From the perspective of language evolution, first Python/Ruby, and then. Unfortunately, it is limited to the Windows platform. These are all enterprise-level software, and the language level is C->; C++ ->Java is the backbone and the operating system is UNIX->; The backbone of Linux/Windows, the network knowledge that software development needs to know is Ethernet-> Ethernet; IP-& gt; TCP/UDP is the backbone. The other thread is the Internet (HTML/CSS/JS/LAMP…). I am a person with technical anxiety, and these main threads of software development must not be abandoned. In addition, from the perspective of architecture, we can see: from the stand-alone era to the C/S architecture (interface, business logic, data SQL are all on the client, only the database server is on S); Then go to the B/S structure (the browser is the client, but traditional programming such as ASP/PHP/JSP/Perl/CGI also puts the interface, business logic and SQL together), but B/S has put these things on the Web server; Then go to the later middleware, take out another layer of business logic and put it on an App server, a classic three-tier structure; Then to the distributed structure, business layer distributed, data layer distributed; Then go to today's cloud architecture-all moved to the server. We can see that changes in technology have been pushing things backwards, leaving only a browser or mobile phone at the front end. Through this, you can see the development trend of the whole technology. Therefore, if you understand these changes and the process of "constantly filling holes" in these changes, you will have a strong grasp of technology. In addition, I have heard many people say that some technologies are not applicable and some technologies are too academic, but for me, I don't have much knowledge from both application and academic aspects. There is no need to separate the application camp from the academic camp. It's all knowledge. It's good to learn it. The development of technology should be rooted in history, not in the future. Don't tell me how wonderful the future of this technology will be (a Microsoft person said Node.js like a fairy on InfoQ's ArchSummit and then gave it to a Hello World). I admit that you can achieve many fancy things with some new technologies. However, I think technology is inheritance, and only inheritance will last forever. Therefore, it is meaningless to say that "so-and-so (technology) needs fire", until it becomes fire, has more applications and is large in scale. Some people say that there is no problem in "not learning C/C++". My response to this is: if you don't even have to learn the technical backbone, what is there to learn? These are the roots, veins and ancestors of computer development. How can you not learn such things? Besides, we need to know the whole computer culture. I think computer culture originated from Unix/C line (note that I am talking about culture, not technology). However, in the application environment, the demand for new technologies is very high. What do you think should be the focus of computer science in education? Most schools teach knowledge-intensive technology, but most enterprises in society are labor-intensive. What is a labor-intensive enterprise? McDonald's French fries are labor-intensive work and do not need the knowledge taught by the school. If one day you want to make something bigger and more professional instead of French fries, the knowledge in school will come in handy. Some people speak a language and a technology, as long as they can solve problems. I don't think so. I think you should at least know about evolution and the process of evolution. To solve some business and technical problems, we need to master a certain technology and study it deeply, and learn it as an art. The first door of software development is business function, in which programming is really enough; The second door is business performance. In this course, the technical basis is very useful, such as file management of operating system, process scheduling, memory management, seven-layer model of network, TCP/UDP protocol, language usage, compilation and implementation of class library, data structure, algorithm and so on. The third door is business intelligence. In this door, you will find that many things are academic, such as search algorithm, recommendation algorithm, prediction, statistics, machine learning, image recognition, distributed architecture and algorithms, and so on. You need to read a lot of computer academic papers. In short, it mainly depends on your professional background. If you are a person who is regarded as a labor force all day, your skills are shallow and practical, but if you do some knowledge-intensive work, you need to do research with your heart, and you will find that you need theoretical knowledge. For example, the cross-border inventory allocation I have done before needs to know the shortest path algorithm, and the inventory forecasting system and data mining I am doing in Amazon now need strong knowledge of mathematical modeling, algorithms and data mining. I think the real masters are all from the knowledge-intensive academic school. More importantly, they can apply the basic knowledge of these theories to their current business. Unfortunately, today's education in our country does not combine those academic theoretical knowledge with practical business problems well. For example, some hash tables or binary tree data structures, if our school can combine these knowledge with practical business problems, the effect will be very good, such as designing an IP address and geographical location query system, designing a distributed NoSQL database, or designing a geographical location retrieval application. When learning the operating system, it will be more interesting if the teacher can take the students to make a mobile phone or an embedded operating system, or study the source code of Unix System V or Linux. When learning network knowledge, students can learn the characteristics of Ethernet and TCP/IP and make optimization. It would be better if you can make a pub/sub message system or a web server like Nginx on the network. It will be more interesting if students can be guided to practice a drawing tool or a game engine in the process of learning graphics. In short, our education is out of touch with reality, and what we teach, both in technology and practice, is seriously backward and out of touch. It is a failure to teach students those theoretical knowledge through practical business or technical problems. So is it more difficult to do software development now? I don't think so. It is easier to be a software developer. Because the internet is very developed now, you can find a lot of shared knowledge-compared with my time. First, you can easily find knowledge, and then there are many communities, and more and more people are sharing articles. We didn't have it then. I looked it up on the internet and found nothing. You have to find out for yourself and investigate for yourself. So I think it's easier than when we were there. Second, there are more tools. Today's tools are much more useful than then. At that time, we were in vi all day, without even an automatic prompt or even a version library management. There are not only more tools, but also more frameworks, all kinds of programming frameworks. We were all students at that time. Write JavaScript, write raw, and don't even have a jQuery. Without these aids, you can improve your productivity. J2EE didn't exist then. And the whole (development environment) is immature. When the highest configuration of a server is 1GB, a WebSphere takes up more than 900 MB-what other applications can it run? So we can only use the most basic system. So I think both the environment and the development process are more standardized now. In the past, when I was developing, I just went on knowing nothing, muddling along, without development standards and nobody taking care of you. Anyway, you can do it well if you do it well, or you can do it badly. Including testing and maintenance, are all on your own. I think the software is developing well now. As soon as you go up, you have good tools, a good knowledge base, a good community, a good development framework, good processes and methods, and even someone will help you do the test, and others will tell you what to do. Very happy. Now many people are still saying that this is not good, that is not good, and it is difficult to develop. It's actually much simpler. However, there is one thing that I think is more difficult for software developers now than we did then. That is, after you enjoy yourself, people become lazy and delicate. Complaints about many things began to increase. What did we have to complain about at that time? There's nothing to complain about. Do what you have to do and learn what you have to learn. Now, I am still picking and choosing what to learn, complaining that the language is too ridiculous, complaining that the IDE is not good, complaining that the framework is too bad, complaining that the version management tool is too ridiculous, and so on. As before, I ate nothing but chaff. If I have bread and steamed bread, I will feel very, very good. Now that there are more delicious foods, we have learned to be picky about food, which is not easy to use and which is not easy to use. It's not that technology is getting harder and the environment is getting worse, but that programmers are becoming sissy. So it is difficult to develop software. After all, programmers themselves have become delicate. How do you enjoy the happiness brought by technology under the pressure of class schedule? China people's thought of the golden mean, entering the WTO and being born, is their daily work. For example, when I was in Shanghai ten years ago, when I was working on a project for Bank of Communications, I took a day off every week, from 9 am to 0 pm 10, and worked 12 hours a day. This kind of work lasted for a whole year, without holidays, and the technology on the project was meaningless. At that time, I went back to my residence at ten o'clock in the evening and wanted to learn some techniques of C++/Java and Unix/Windows, so I read until 1 1:30 in the evening and learned a lot every day. I am very happy after a year. I felt very happy at that time, because it was happy to have the feeling of growing up. Now I have more things to do, such as work, blogging and raising children. Get up at 7: 30 in the morning, browse foreign news, hacker news, technology church, Reddit, high availability and other websites, and go to work at 9: 00. Get off work at six or seven in the evening and start taking care of the children. At ten o'clock, when the child goes to bed, I will start to reread what happened that day. This time may also be used for reading. I don't like to be interrupted in the process of studying, so my family are sleeping from ten to twelve, which is a good time for me to continue my study. Maybe from 1 1:30 in the evening, I will take some notes or write a blog. I now have high requirements for the quality of cool shell articles, so it takes about a week to generate an article. I usually sleep at one or two o'clock every day. I can't help it I have technical anxiety. But I think this kind of life is very substantial and practical. In addition, it is very interesting to play any technology in depth. Some people form a value orientation, "I only do what I will never do." An engineer just came to Amazon some time ago. He once worked as a data mining recommendation system. It turned out that the reorganization of the company wanted him to be the front end, and he refused to leave. He said he didn't want to be the front end. I think front-end and back-end are all programming, Javascript is programming, and C++ is also programming. Programming is not what language you code in, but your ability to organize programs and design software. As long as it rises to mental work, it is the same with everything, and there is no technical difference. You may not like that technology, but you still have to understand it. There is no need to abandon it completely. Javascript-As long as Javascript can be realized, it will be replaced by JavaScript one day. Back to the question, how can we enjoy happiness? First, you should separate entry into WTO from birth. Don't let worldly things disturb your inner world. Your emotions should not be controlled by others, nor should they be polluted by the world. If you live truly, you will be happy.