It is very important for programmers to challenge themselves, either by constantly innovating or by stagnant technology. At the beginning of the new year, I sorted out my 12-month goals. Each goal is a challenge to technology or individual abilities and can be used repeatedly year after year.
01. become Patient
02. stay healthy
03. adapting to changes
04. Learning a new Programming Language
05. Automation
06. Learn more mathematical knowledge
07. Focus on Security
08. Back up your data
09. Learn more theoretical knowledge
10. Engage in Arts and Humanities
11. New software learning
12. Complete a project of your own.
Next, I will introduce these suggestions one by one.
Become Patient
Programmers will worry that the effort to exercise patience will not get the expected reward. In fact, as long as you make a small investment to cultivate patience, you will be able to gain a great deal. The following is a list of tests you can try to get started. As long as you fully devote yourself to any of these items, you can leave the outsourcers (to become experienced beginners) for a month or so:
Cooking, hiking, skiing, astronomy, jogging, woodworking, martial arts, dance
Stay healthy
Programmers usually sit for less time, so they face health problems in their daily work, but they are often ignored by us. It takes a whole month to adjust your living habits, diet, and environment. This will encourage you to develop lasting and healthy living habits. Go to a clinic every year to check for blood pressure, cholesterol, and blood sugar and see how these indicators have changed recently. If your wrist is getting sore or it has been hurting for a long time, immediately stop your hand and start fighting with the mouse hand (repetitive strain. Pay attention to your sitting posture, especially the shoulders and neck. I used a pose tool to help with the treatment.
Track your weight, intake, and burning calories. If necessary, you can change your lifestyle to develop healthy eating habits and lose weight.
Common health problems for programmers
Embrace the discomfort of changes
When I was in my early s, by observing older partners, I found that some people were stuck while others were energetic. I tried to find the reasons behind them. The answer is comfort. Comfort will lead to technological stagnation. When we find a system that can be used for me, we will always use it. But the technology is constantly improving, and those staying in the comfort zone will never realize that these advances can bring them benefits. Make yourself uncomfortable.
The items listed below may make you feel uncomfortable at the beginning:
1. Use the vro keyboard
2. Replace emacs with vim, and vice versa.
3. Do not use the mouse
4. Use different Window managers
5. Drink coffee without cream or sugar, or clear tea.
6. Try "popular and boring new things" for a month"
7. Do not open your phone one day in a week
8. learning to use a device that can be input by one hand
9. Try a different operating system
10. do not access the Internet one day in a week
11. Try to limit your diet: Try vegetarian food, become a pure vegetarian, do not eat dairy products, etc.
12. Eat a kind of food you don't like every day
13. Attach your arm to a bandage
14. Learn to write with the hand you are not used
15. start a blog
16. participate in public speeches
17. Listen to a music you don't like in a month
18. Volunteer in hospital or retired home care
19. One day of life in a week
20. traveling to a country different from your own culture or language
21. Read a well-received but not your favorite novel.
22. Watch a well-received but not your favorite style movie or performance.
23. Learn to drive with shift lever (manual)
24. oppose some things you believe
After a month's attempt, you can decide whether to continue using the new method, or find a combination of good experiences and original methods in the new method. For example, when I switched from emacs for 10 years to vim, I would set the emacs style shortcut key for the insert mode to continue using vim.
Learning a new Programming Language
Programming Languages start and fall. If you only know one language, the programmer's problem-solving skills and career prospects will be limited. Spend a whole month absorbing a new language or a new programming paradigm and using it to write a small program.
Below are some programming languages that can be learned but are not very popular:
Racket, Haskell, Scala, Erlang, Clojure, SML/NJOCaml, Squeak, Prolog, Datalog.
If you do not know anything, you can implement a new programming language.
Automation
Programmers have the most powerful skills to be developed, namely the ability to automate virtual and reality. If you have never created a robot, do it. At least learn to use Lego Mindstorms or play with an Arduino board.
Check your daily tasks to see which ones can be completely or partially automated. Automation has made great strides in the family life, and can even DIY the system like Insteon.
One month of investment for automation:
1. Adjust your email filter or set procmail
2. Compile an automated shell script for frequent work
3. Write shell scripts to help with writing
4. Learn how to use the cron Tool
5. Modify cabinet lights to be controlled by induction
6. Try to replace wired network with Wireless Network
7. Stop manual synchronization: Save the information to the cloud
8. Install a remote control audio system
9. Control the air conditioner at home through your server
10. Install a digital surveillance camera
11. Install a digital internal call system and a children's monitoring system
12. Enable the coffee machine automatically.
13. automatically install the sink for pets
14. install an automatic induction door for pets
15. Transform Roomba into a personal messenger
:
Procmail: The procmail package contains an automatic mail manager that can filter and sort emails.
Cron: a scheduled execution tool in linux.
Roomba: Roomba is a timed intelligent robot produced by iRobo.
Learn more about mathematics
Computer science is essentially a discipline of mathematics. Good mathematicians generate excellent programmers. Do not let your mathematical abilities be exhausted.
Consider spending one month each year reviewing one of the items in the list:
Logic, discrete mathematics, Calculus, probability theory, statistics, abstract algebra, number theory, model theory, and partial order Theory
Focus on Security
Few programmers have good security habits. If you care about your digital security, you will be more concerned about the security of your written code. Make sure that you use a unique high-security password on each site. Use the encrypted password manager to manage your password, such as PasswordSafe or KeePassX. If you have not encrypted the entire disk, set aside time to complete it. (It can be done easily on Mac)
Every year, the first 10 security vulnerabilities in the past 12 months are investigated. How did they happen? How can we avoid these vulnerabilities in your code during programming?
Here are some other security tasks you need to try:
1. Add SSL verification to Apache
2. Use RSA or AES to implement the password system
3. Try to decrypt your wireless network password
4. Use WireShark to listen for your network communication
5. Set key-based password-less ssh Login
6. Run nmap on your own; configure your firewall
7. Create a Port Scan
8. USB drive Encryption
9. Monitoring log files
10. Set the cron task to regularly update your program
:
Nmap: network scanning and sniffing toolkit in linux
Back up your data
Spend some time checking your backup policy every year.
It takes one month to minimize the backup time.
Using cloud-based backup services, such as Mozy and Carbonite, it is easy to establish seamless automatic backup.
For more comprehensive defense, you can choose to distribute hard disks to everyone and back up each computer using an automatic backup tool such as Time Machine.
Use Remote warehouses to control versions of important files.
Learn more theoretical knowledge
Computer science has a wealth of theoretical foundations. While keeping abreast of the latest developments, we also need to strengthen our understanding of classical development theories.
Spend one month on the following topics every year:
1. Formal Language
2. Theory of automation and Computability
3. computing complexity theory
4. Formal Method
5. Semantics
6. algorithms and data structures
:
Formal Language: a finite or infinite set of sentences or symbol strings based on certain rules.
Automatic Machine: a mathematical model of a wired state machine (FSM.
Computational Theory: studies the feasibility of computing and the theory of function algorithms. Also known as algorithm theory. It is the basis of algorithm design and analysis, and also the theoretical basis of computer science.
Computing complexity theory: computing complexity theory is a branch of computer science. It uses Mathematical Methods to quantitatively analyze the consumption of various computing resources, it is also the theoretical basis of algorithm analysis to study the relationship and basic nature of various problems in computing complexity.
Formal Method: In logical science, it refers to analyzing and studying the formal structure of thinking.
Semantics: a discipline that studies the meaning of words in natural language. It can also be a study of symbolic interpretations in a logical form system.
For beginners, you can take a look at the following articles:
Use Haskell to write a CEK-style Parser (or semantic analyzer)
Syntax Parsing through Derivation
Lost method: how to delete the red/black tree of Okasaki
Use Scheme for Regular Expression Pattern Matching through Derivation
Convert regular expression to non-deterministic automatic machine (NFA)
:
CEK: The CEK machine is a mechanical model of λ-calculus developed by Matthias Felleisen and Dan Friedman.
Haskell: a pure functional programming language named after American mathematician Haskell Brooks Curry.
Contact with arts and humanities
Engineers often despise art. They do not realize that art and humanities are important factors for basic sublimation. Steve Jobs is willing to point out the importance of combining technology with humanity, but that is also true.
The principles of art and design also apply to interactions between people and computers. Do not ignore these principles. The training of arts and humanities makes intuition more acute, and this exercise is hard to be measured by numbers. Engineers need to know how to measure things they cannot measure, rather than just counting what they can.
Learn the topics listed below for at least one month each year:
1. Industrial Design
2. Philosophy
3. Photography
4. Painting
5. Sketch
6. Music and Music Theory
7. Movies
8. Literature
Social science will also be of great help to computer scientists, especially economics and philosophy.
New software learning
A good way to find inspiration for your software is to learn from new or new applications. For example, if you have never tried 3D modeling software, you can try Blender. Or, if you have never touched LaTeX before, please try to understand it with sincerity.
During the learning process, pay attention to what you like and what you hate. Sincerely ask yourself whether the observed content exists in your software. It is difficult to see your shortcomings at work, but it is easy to find others' shortcomings. No parent in the world thinks that their children are ugly. Learn to see the shortcomings of your work.
Complete a project
If you write code for others all day long, writing programs for yourself can help you remember why you became a programmer. Allocate one month to your selected project each year to complete core functions and release the project open source.
Original article: mattmight Compilation: bole online-Tang Yuhua