12 resolutions for programmers
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.
Become Patient
Stay healthy
Adapting to changes
Learning a new Programming Language
Automation
Learn more about mathematics
Focus on Security
Back up your data
Learn more theoretical knowledge
Contact with arts and humanities
New software learning
Complete a project
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.
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:
Use the dwaxak keyboard
Replace Emacs with vim, and vice versa.
Do not use the mouse
Use different Window managers
Clear coffee without cream or sugar or tea
Try "popular and boring new things" for a month"
One day in a week
Learning to use a single-handed device
Try a different operating system
Do not access the Internet one day in a week
Try to limit your diet: Try vegetarian food, become a pure vegetarian, do not eat dairy products, and so on.
Eat a kind of food you don't like every day
Attach your arm to a bandage
Learn to write with the hand you are not used
Start a blog
Participate in public speeches
Listen to a music you don't like
Volunteer in hospital or retired home care
One day in a week
Traveling to a country different from your own culture or language
Read a well-received but not your favorite novel.
Watch a movie or show that is well received but not in your favorite style
Learn to drive with shift lever (manual)
Opposed to something 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/nj.
Ocaml.
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:
Adjust your email filter or set procmail
Write automated shell scripts for frequent work
Write shell scripts to help write
Learn how to use the cron Tool
Modify cabinet lamp by Induction Control
Try to replace wired network with Wireless Network
Stop manual synchronization: save information to the cloud
Install a remote control audio system
Control the air conditioner at home through your server
Install a digital surveillance camera
Install a digital internal call system and a children's monitoring system
Enable the coffee machine automatically
Automatically install a sink for pets
Install an automatic door for pets
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
Fan Yan
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:
Add SSL verification to Apache
Use RSA or AEs to implement a cryptographic system
Try to crack your wireless network password
Use Wireshark to listen on your network communication
Set key-based SSH login without a password
Run NMAP by yourself; configure your firewall
Create a Port Scan
Encrypt a USB drive
Monitoring Log File
Set a 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 rich theoretical bases.
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:
Formal Language
Automatic Mechanism and Computability Theory
Computing complexity theory
Formal Method
Semantics
Algorithm and Data Structure
:
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 Zheng to a 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:
Industrial Design
Philosophy
Photography
Painting
Sketch
Music and Music Theory
Movie
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.