You can spend a year searching,
Every one months to set a goal to achieve.
Each month is a technical or personal challenge that can be updated annually:
1. get into real life.
2. stay healthy.
3. accept discomfort.
4. learn a new programming language.
5. Automation.
6. learn a little more math.
7. focus on safety.
8. back up your data.
9. learn a bit more about theory.
The art and humanities disciplines.
learn new software.
complete a personal project.
Read on and look at my suggestions.
1, enter the real life.
Programmers are too obsessed with digital devices and have a world beyond digital devices.
Therefore, the investment in real life will bring a relatively much return.
Here is a starting table, which is a real-life activity to try. For each activity, if you really pay one months, you are no longer a novice (but an experienced beginner):
Cook
Hiking
Ski
Astronomy
Jogging
Weightlifting
Woodworking
Wushu
Dance
2. Keep Healthy
Programmers tend to live a sedentary life, so we face the unique health challenges that our profession poses.
We tend to overlook these challenges.
Every year, spend a whole month adjusting your workout, diet and environment to develop a lasting health habit.
Go to a clinic every year to measure blood pressure, cholesterol and blood sugar. Observe how these values change over time.
3. Comfortable accepting uncomfortable
From my early years, I looked at my older companions, trying to find out why some people were stagnant, while others were always energetic.
The answer is comfort.
Comfort leads to technical rigidities.
A system that can serve us normally, and we have been insisting on using it.
However, technology is progressing, and those who are confined to comfort are absolutely not aware of the benefits of these advances.
The formula becomes comfortable because it turns out to be uncomfortable.
The list of things that might make you uncomfortable at first:
Change to a Dvorak keyboard.
Convert from Emacs Editor to vim editor or vice versa.
Stop using the mouse.
Use a different window manager.
Change from cream and sugar to non-milk coffee or tea without seasoning.
Spend a whole month trying to "pop new junk".
Turn off your phone one day a week.
Learn to use one-handed input devices.
Try using a different operating system.
For a small project, try a different version control system.
Force off the net one day a week.
Try dietary constraints: vegan, vegetarian, milk-free, etc.
Eat a food you don't like every day.
Less use of the advantageous arm (dominant arm).
Learn to write with the non-profit hand (non-dominant hand).
Start blogging.
Enroll in public speaking.
Listen to a music you don't like for one months.
Volunteering at a hospital or retirement home.
Fasting once a week.
Go to a country that is in a different language or has a different culture.
A popular novel from a category you don't like.
Choose a highly acclaimed film or movie from a category you don't like.
Learn to drive a car with a manual gear.
Question some of the things you believe.
Do something different, one months later, decide whether you want to continue doing this, or see if you can find a way to combine new things with the best of old things.
For example, when I switched to vim using emacs for ten years , I set emacs in insert mode. Style shortcut keys, but the editor I use is vim .
Update: Reader Shae Erisson to accept the uncomfortable continuation of the "3 rule": When there are already 3 Personal recommendation You try something, you have to try it.
He also gave a " minutes rule": A time to judge a certain thing (such as a movie or TV show) for a minute. If you don't want to go on after a few minutes, give it up.
I like all the two rules.
4. Learn a new programming language
Programming languages rise and fall.
Programmers who know only one language, their ability to solve problems and their career prospects will be limited.
Use it to write a small program.
Here are some non-mainstream languages to learn:
Racket.
Haskell.
Rust.
Scala.
Erlang.
Clojure.
Sml/nj.
OCaml.
Squeak.
Prolog.
Datalog.
Minikanren.
If you have enough courage, try a dependency type (dependently-typed) programming language or Theorem proving system (theorem-provingsystems):
Agda.
Coq.
Idris.
If you don't have a programming language to learn, invent one yourself.
5. Automation
The most powerful and unused skill that programmers have is the ability to automate virtual and reality.
If you've never been a robot, do it.
At least play with the high-brain storm robot:
Or play with the Arduino board or Raspberry Pi:
Watch your daily activities and decide which ones will be fully or partially automated.
Home automation technology is very developed, with the help of DIY systems, such as Insteon, a lot of things are possible.
Take one months to do an automated project:
Tune your mail filter or install procmail.
Set up shell scripts to automate recurring operations.
Create a new shell script to help you write.
Learn how to use the cron tool.
Connect the lamp in the closet with the motion detector.
Use wireless instead of wired where possible.
Stop manual Sync: Move it to the cloud.
Install a remote voice control system.
Use your server to control your thermostat.
Install the digital security camera.
Make an intercom system or baby monitor.
Let your coffee machine turn on automatically.
Install automatic water-adding plates for pets.
Do sensor-controlled pet doors.
Crack Roomba, make it a courier.
6. Learn More Math
Computer science is a discipline related to mathematics.
The premise of being a good programmer is to be a good mathematician.
Don't let your math get away.
Consider spending one months a year reviewing one of these topics:
Logic.
Discrete mathematics.
Calculus.
Probability theory.
Statistics.
Abstract algebra.
Arithmetical.
Category theory.
Order theory.
7. Focus on Safety
Very few programmers have good security habits.
If you care about your electronic information security, you will be more concerned about the security of your own code.
Check to see if you are using a unique, complex password on each website.
Use an encrypted password manager to manage your passwords, such as passwordsafe or KeePassX.
If you're not used to encrypting it all, take the time to do it. (On Mac , it's not hard to set it up.) )
Every year, look at the high-risk vulnerabilities of the past month or two. How did they happen? What programming habits can prevent these problems from appearing in your code?
Here are the other security tasks you can try:
LearnSSHwhat else to do.
InApacheinstalled onSSLSecurity certificate.
Implement an encryption system, such asRSAorAES.
Try to hack the key for your wireless network.
UseWireSharksniff your Internet traffic.
Set password-free, key-basedSSHLogin.
Run it YourselfNmap. Configure your firewall.
Set the port to knock (port-knocking).
To do an encryptedUdisk.
Install the log file Monitor.
Set upCronJob (cronjob) to update the package in a regular manner.
8. Back up your data
Every year, take the time to rethink your backup strategy.
It takes one months to minimize the cost of making a backup.
(I recently put a lot of my work files in Copy , which is a handy Dropbox app that has more free storage space than Dropbox.) Use this referral link to get the extra 5 GB. )
Choose a disaster recovery solution: Assign a separate hard drive for each computer, and turn on automatic backup with tools like Time machine.
Use version control to manage critical files and store them in a remote server.
9. Theory of multi-point learning
Computer science has a rich theoretical structure.
Keep up with the new developments and review the classical theories you have mastered.
Spend one months a year learning a theory similar to the following:
Formal language.
The theory of automata and computable.
Theory of complexity.
Formal methods.
Semantics.
Algorithms and data structures.
For starters, you might want to look at these posts:
Write the (or semantic) interpreter in the CEK form in the Haskell language.
The grammatical analysis is done by derivation.
Forgotten method: How to remove an element from a Okasaki red-black tree.
Using the scheme language, the Regular expression pattern is matched by the derivation method.
Converts a regular expression to a non-deterministic finite state automaton (NFA).
The art and humanities disciplines
Engineers tend to despise art.
What engineers are unaware of is that art and humanities have made excellent technology.
Steven · Jobs likes to point out the importance of connecting technology and humanities, and that's true.
Don't be ignorant of these theories.
Art and humanities train intuition and make it sharp. This process is done in a way that is difficult to quantify. Yet this intuition is necessary for us to work in the field of quantification.
Engineers need to learn how to measure what they cannot calculate, not just what they can measure.
Spend at least one months a year and learn more about the following theories:
Industrial design.
Philosophy.
Photography.
Painting.
Sketch.
Music and music theory.
Movie.
Literature.
The social sciences also contribute a lot to computer science. In particular, try economics and psychology.
Learn new software
A good way to get inspiration for your own software is to learn one or a new type of application.
For example, if you have never used 3D modeling tools, try Blender.
Or, if you've never studied LaTeX, really put it to the test.
Keep a record of what you like and don't like in the course of your studies.
Ask yourself, are these observations reflected in the software you created?
It's hard to point out bad habits in your own work, but it's easy to find fault with someone else's work.
Every pair of parents ' children are beautiful.
Learn to know your ugly child.
complete a personal project
If you're always writing code for someone else, remember that programmers are programmers because they write programs for themselves.
Spend one months a year on a project of your own choosing.
Implement the core part of that project.
Make it open source and publish it to the world.
Why be a programmer (go)