Doing the right thing is equally important as doing the right thing-a six-year summary by a software engineer
Doing the right thing is equally important as doing the right thing.
A 6-year summary by a software engineer
Author: Cheng Xiaoxu
(Statement: you are welcome to reprint it. Please ensure the integrity of the article)
"When I graduated in another year", I saw a batch of students leaving the Ivory Tower of my life and taking on their respective jobs. I thought I was so angry that I was full of ambition, and I felt deeply touched ...... This article is about the accumulation or refinement of my six years of work experience. I hope to help all software engineers and realize their goals as soon as possible. This article focuses on the specific suggestions on how software developers can improve their professional software technologies. The previous points aim to determine the major direction.
I would like to share this document with the development team that has devoted you three years of youth and passion. There are also team members: PPL, YT, YK, TYF, LGL, chlorophyll, CDY, CB, DPD.
1. Share the first experience:"Education represents the past, ability represents the present, and learning ability represents the future ."In fact, this is a research result from the field of education outside China. I believe that my friends who have worked for several or more years have some experience with this principle. But I believe this is also important:"The important truth is that it is too late to regret it for a lifetime !"So put it in each article, so that those who just graduated can see it early!
2,You must determine your own development direction and develop feasible plans for this purpose.Don't say anything. "I just graduated and don't know what I may do in the future ?", "Follow the feeling and do it first ". This is because your subconscious will imply that your behavior is idle and idle. I have been working on technology and will become an expert person in the future? Become a professional manager in the management direction? Are you familiar with the industry and fields, and be self-reliant in the future? Or is it possible to mix in the industry first? This is very important, and it will determine your"What is the right thing to do!".
3,In the software development team, technology is not omnipotent, but no technology is absolutely impossible!In technical teams, technology and character are equally important. Of course, appearance is also important, especially in teams with more MM.In the software project team, the technical level is an important factor to be valued and respected.You must have a technical foundation for management, system analysis, design, coding, product management, testing, documentation, implementation, and maintenance. I am ignorant. I have never seen a layman lead a software development team to successfully complete software development projects. I once saw a "highly educated cool" (non-technical) who had completed a project with a bunch of people. On the second day of project delivery, the project team members threw a phrase "I can't stand it anymore !" Split and run different things. Everyone can imagine the "success" of that project.
4,Develop your own software development knowledge learning plan in detail, and pay attention to timely correction and adjustment(Software development technology is changing too fast).Remember: "If a software developer1, 2He has never updated his knowledge during the year, so he no longer belongs to this industry ."Do not tell yourself that there is no time. The famous "principles" in the field of time management tell us that the use of the other eight hours will determine the success or failure of your life! Since I graduated, my actual daily learning time has exceeded2Hours.
My main learning plans and materials for six years after graduation:
Time |
Target |
Classic Books |
2000 |
C, C ++, and Delphi |
C ++ programming ideas and Delphi4 Development |
2001 |
Learn about Windows operating system principles, Windows Programming SDK, and information security and cryptography. |
Open the Windows window, Windows operating system principle, Windows core programming, windows network programming technology, encryption and decryption, application cryptography, password encoding and password analysis: Principles and Methods |
2002 |
Learning software engineering, software system analysis, design, testing, unified software development methods and Rose |
UML and pattern applications, unified software development, Rose from entry to proficiency, software engineering: research methods, system analysis and design by practitioners, |
2003 |
Learn the Java language and technology, design patterns, |
Design Mode, JAVA 2 programming guide, J2EE Database Development Guide, Master EJB, and EJB application guide (version 2nd) |
2004 |
Work reasons: no progress in technology |
Knowledge in psychology, sociology, economics, education, and other fields with limited time |
2006 |
Relearn Java-related technologies and software development methodology |
Reconstruction and agile software development (principles, models and practices) code Daquan, Spring In Action, J2EE without EJB, Spring framework advanced programming, The Pragmatic Programmer, Pragmatic Ajax, Ajax in Action, WebWork in Action, application Rails for agile Web development, people assembly and resolution eXtreme Programming-Embracing Change |
5,Books are the ladder of human progress, especially for software developers.Books are the most effective way to learn knowledge. Don't count too much on your work to meet the "world-class" and don't bother teaching you. My personal experience in buying books is: Never buy books from other Chinese people! Those books I bought ,! 00% all regrets, and no such exception exists. Even more angry, these books are hard to be sold on the stalls in the second-hand market. "Having books doesn't mean having knowledge, having knowledge doesn't mean having skills, having skills doesn't mean having culture, and having culture doesn't mean having wisdom ." Only the wisdom of books can be truly possessed.
6,Don't be limited to the superficial use of a technology, even if you only use it once or twice."Nothing should be done" is what engineers in any industry should not possess.Develop a Windows application. Take a look at the design, loading, and execution principles of the Windows program, analyze the PE file format, and try to develop a Windows application from scratch using the SDK; use VC ++, Delphi, Java ,. net to develop applications. It takes time to study MFC, VCL, J2EE, and ,.. Net Framework Design or source code. In addition to excellent open-source products or frameworks such as J2EE, JBoss, Spring, and Hibernate, let's take a look at how masters abstract, analyze, design, and implement general solutions for similar problems. If you try to do this, you will encounter a few problems that make you confused in your future work, because many things you "know and know why "!
7,Programming in a language, but do not restrain your thoughts."Code Daquan": "Deep into a language programming, do not float on the surface ".In-depth development of a language is far from enough. Any programming language has its own reasons. Therefore, no language is the "panacea" for "treating all diseases ". Examples of how programming languages affect and constrain how developers solve specific problems. My experience is: Why can't I use the modular encapsulation methods of C, C51, and assembly when developing some key modules using object tools? Why can't I refer to the IoC and AOP design ideas from the Java Community when using traditional desktop development tools (VC ++ and Delphi at present) for system architecture design, even learning from excellent open-source frameworks such as Spring, Hibernate, and JBoss? When designing and implementing functions similar to real-time communication and data collection, why can't we reference an excellent system framework and mode from real-time systems and embedded systems? Why does everything have to be solved with the tradition or experience of individuals and teams in the development language ??? "The rock in the mountains can attack the jade ".
8,Develop the habit of summarization and reflection, consciously extract the results of daily work, and form your own personal source code library, general system architecture for solving certain types of problems, and even evolve into a framework.As we all know, there is a notable difference between having experience and having experience for software developers: inexperienced people start from scratch when completing any task, experienced users often solve the problem by reorganizing their Reusable Modules and class libraries (in fact, this conclusion should not be confined to the software development field, but can be extended to many aspects ). This does not mean that all reusable things must be implemented by themselves. Other people's mature testing results can also be collected, organized, and integrated into their own knowledge bases. However, it is best to implement it by yourself, so that there is no intellectual property rights, copyrights, and other issues. The key is to be able to grasp this knowledge point and possess this skill after implementation.
9,Both Theory and Practice.Engineers observe and analyze things and the world from the engineer's perspective.. A qualified software engineer is a person who truly understands the nature of software products and the essence of software product R & D ideas.(Personal opinion, welcome to discuss). Mastering the software development language and application language tools to solve specific problems at work and accomplish the target tasks is the main work of software engineers. However, from the perspective of software engineers, this is only an external thing, it is not an important and essential task. Learn and master the theoretical knowledge and methodology of software product development, and understand in practice, analyze, design, and implement software products to solve specific software product R & D problems, is the real work of software engineers.In terms of mature theories and reliable methodologies, we can think, analyze, and solve problems. In practice, we can verify and correct these ideas and methods to form our own theoretical system and practical methodology.
10,More open-minded means more open-minded.Don't hold on to your own technologies and achievements, and wait until they are obsolete and become junk.Please release your own research results in a timely manner: developed products, creative designs or code, published for everyone to communicate or use, your results have the opportunity to evolve and sublimate. Think about the Windows system tools that I developed in 2000. Five or six years later, today we are still like that. Today, many popular Windows system tools are much later than we did, but they have evolved well, and there are so many users.In addition, do not keep your own technologies and ideas, communicate and share with others as much as possible, or pass on to development team members.. "After the exchange of apple with people, everyone still has only one apple, but after the exchange of ideas, everyone has two ideas." Everyone understands the truth, but how many people can really do this?
11,Try to participate in the development of open-source projects, or develop some of your own products together with your friends. Do not do anything without earning money.. The network is no longer just a "virtual world". There are many open source projects, cooperative development projects, and outsourcing projects on the Internet. This is an excellent opportunity to learn more than work, and can get to know more people. Do not study and understand embedded, real-time, communication, network and other technologies because your work is ERP. If someone else asks you for a contract, but you don't know it, you will regret it.
12,Do not limit your knowledge to technical aspects.Nobel Economics Prize Winner XI Mon Professor's research results show that:"For a person with a certain foundation, as long as he is willing to work hard."Educational Psychology Xie Simon Professor's research results are named Simon's learning method. It can be seen that it is far less difficult and profound to master a strange knowledge. It is widely used in many ways. Consolidate your Influence Circle and expand your attention circle as much as possible. Financial, economic, tax, management and other knowledge, take the time to take a look at the time to hide your profile and plan ahead.
13,Summary and reflection of this article:
A:Do not be a technical expert, unless your goal is so.Although this article provides advice on improving software development knowledge, I have never agreed to be a technical expert. You can improve your professional knowledge, but you can do your job right away.
B:Improving Software Knowledge and technology is only the surface of the problem. In essence, it is to improve the idea of understanding, analyzing, and solving the problem.Many methods and principles of software expertise can be easily extended and applied to other aspects of life.
C:On the basis of being competent for the job, we will immediately explore the professional knowledge in other fields, enrich our knowledge system, and improve our overall quality,Especially those who are not technically focused.