Welcome to MY BLOG, a unique blog here for you to This blog have added such value to my life, and I love having the opportunity to share my passions and thought

self programming



Self-taught programming is an attitude. Students who have never studied programming by themselves are even more respectable. In a previous article, I briefly discussed some general learning skills using R language learning as an example and then wrote two notes by reading How to Learn to supplement some general learning methods. This article is mainly to introduce some of my experience in self-study programming, mainly focusing on “the difficulties that beginners may encounter when programming by themselves and how to overcome them”. Several stages of self-learning programming

The first stage: no sense period (I never thought about learning to program)

Take myself as an example: my undergraduate major in bioengineering has only been exposed to programming during my two courses: computer basics and C. There are also potentially relevant courses: Engineering Mathematics, Linear Algebra, Biostatistics, etc. I started to do some molecular biology-related topics (drawing DNA / RNA, running glue …) from my sophomore year, so I never thought about systematically learning programming and computer science knowledge. Maybe you are at this stage now.

Phase Two: Introductory Period

Take myself as an example: When I was a junior in graduate school, I began to want to further study and further my studies in bioinformatics. So, while reviewing the postgraduate subjects, I was also learning some Python (introduction to some online tutorials) and Linux operation (introduction to “Bird’s Private Kitchen”). Because at that time, it was mainly to review the postgraduate subjects, and usually did not contact some actual items, when the actual review, many operations were rusty. At that time, some of the fellows in the other research group came up with some problems, and I couldn’t handle them at the scene (this will make others impress you very much, and it also fully explains the importance of preparation and review). There are some that I need to think about for a while. Remember what to do. After joining the research group, the instructor gave several months to learn to program, mainly Shell, Python, R, HTML / CSS, JavaScript, Bootstrap), PHP and MySQL (Perl is not required). Some additional tools were learned at this time: vim operation, tools for logging into remote servers, etc. In addition to learning programming, at this stage, I have already begun to contact laboratory topics. The first was to use Photoshop, Illustrator, Excel to process some pictures and tables (the first year of undergraduate and master’s degree worked as the director of the college-level publicity department, so these tasks are relatively easy ). At the same time, I also need to run some command-line tools with bash, process data with R and Python, develop simple data analysis scripts, and develop some simple web interface with PHP and Bootstrap.

Phase three: Project Practice Period

Learning programming cannot always be in the introductory stage, such as staying in the basic concepts of programming such as variable types, loops, and conditional judgments. In the project practice period, based on the accumulated programming knowledge and preliminary practice, most people’s grammar problems should have been basically solved. At this time, it has entered the most important stage of the programming learning process: verifying the previously learned knowledge and learning new knowledge through a large number of actual projects (both theoretical and tool use). Take myself as an example: at this stage, I can basically understand the code written by others (if there are better comments), and at this time I also learned to use print to debug the code, see the code input and output and learned GitHub. To manage the version of the code.

Phase four: Retrospective reflection period and in-depth learning

Through the actual project exercise in the third stage, we also have practical programming development experience. At this time, what I need most is my own reflection, thinking about which aspects of my knowledge are lacking. In order to choose the direction you are interested in, learn the relevant source code of other projects and specific chapters (topics) of related books to further improve your programming level in a certain direction. There are a large number of people in the programming world: if they feel that some implementation solutions are better than themselves, they will optimize and refactor previous projects and continue to iterate. There are also a large number of people in the programming world: dissatisfied with the existing tools, and think of better functions and implementations, they will boldly implement them and release them, and iterate continuously. Not everyone can easily make a breakthrough at this stage. The learning at this stage will last for a long time, and often the speed of new technology generation is far faster than you imagine, and you can always maintain a good learning mentality. As well as the hot hands-on experience, it is a very challenging thing, and in addition to learning more knowledge and skills, we must often review previous project experience and programming skills.

The fifth stage: the period of immersion

Unless you are talented or interested, it should be difficult for most people to reach the fifth stage (even if you are a computer science student). The main characteristics of this stage: proficient in computer theory, familiar with computer hardware, proficient in algorithms, free switching of programming languages, easy access to core and third-party libraries of programming languages, and great influence (such as being able to publish a book that is considered a classic Books), you can develop a programming language yourself.

Beginners may encounter difficulties in programming

Think about it. There are two types of difficulties that beginners may encounter in self-learning programming. One is the problem of learning motivation and interest in learning, and the other is the problem of learning methodology: it is easy to lose interest in learning (such as not understand, Do n’t understand, full of frustration, unable to persist in learning, etc.) do n’t know how to learn (ca n’t find learning materials that suit you, do n’t know who to ask if you have questions, low learning efficiency, easy to forget, etc.) Overcoming the difficulties encountered in self-study programming is a systems engineering project. In order to answer this question as briefly as possible, I have used three subtitles here: Give yourself a strong motivation, “Building wheels. The importance of the advanced way: many challenges and details may be difficult to discuss at once, but through these three parts, I believe that at least part of the problems can be solved for you.

Give yourself a strong motivation

The “forced” passive action is a very painful thing in itself, especially forcing you to do something that is completely uninteresting or worthless. Learning new things generally has a certain cost for us, and the corresponding thing is that often we all want to get some return (value). Self-learning programming is generally “forced” in the early stages, such as the boss asking you to learn new technology, graduation topics must use programming, you want to use programming development tools, and so on. However, as time progresses, the students who were initially “forced” to self-program may become differentiated: part of the study is very active, and the willingness to think and practice is very strong; the other part is very passive to study and is unwilling to spend much thought to ponder And practice. The reason for the differentiation I temporarily thought of here: the blow of frustration, the lack of sense of accomplishment, and low self-esteem. If you want to learn programming by yourself and continue to make some achievements, the first task you need to complete is to defeat frustration early, find a sense of accomplishment, and cultivate self-esteem. Defeating frustration: Start with simple learning and practice. The simpler concepts may be more important (starting with simple concepts can also reduce frustration). Find a sense of accomplishment: solve a TODO, solve Problem, make an achievement, publish an article, do a public display to cultivate self-esteem: … (relatively difficult, requires long-term internal and external factors)

The Advanced Road: Challenges

For themselves, classmate A thinks it is a difficult thing, classmate B may think it is not difficult, you think it is simple, and others may find it difficult. If we want to effectively break the current limit of knowledge and skills, the best way is probably to challenge a task that challenges us. The difficulty of this task also determines a certain height we can reach now.

The article ends with a paraphrase:

If you never knew to the program before, now you can write your program skillfully and let a lot of people use your program. This is a breakthrough (more vivid description: if you do n’t write R packages and Python modules before Wait, now you have learned and can develop your R packages and Python modules independently, and have the ability to publish to public platforms for others to use).

If you didn’t know anything about algorithms before, now you can build on existing algorithms and make improvements, which is kind of broken.

If you have never taught others how to learn to program systematically before, but now you not only teach others how to learn programming through your articles and videos, this is a breakthrough.

Breaking through the limits of your programming skills is programming learning.