> For the complete documentation index, see [llms.txt](https://books.codepath.org/student-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.codepath.org/student-handbook/software-engineering/success-as-a-software-engineer/seven-pieces-of-advice.md).

# Seven Pieces of Advice

**Source:** <https://blog.pragmaticengineer.com/advice-to-myself-when-starting-as-a-software-developer/>

Here are seven pieces of advice the author wishes they would have started doing sooner. Habits that could have helped them grow faster and in a more focused way.

1. **Take the time to read two books per year on software engineering**
2. **Learn the language you use at work in-depth, to the very bottom**
3. **Pair with other developers more often**
4. **Write unit tests and run them against a CI**
5. **Make refactoring a habit and master refactoring tools**
6. **Know that good software engineering is experience. Get lots of it.**
7. **Teach what you learn**

Each of these is expanded on in more detail below.

### **Take the time to read two books per year on software engineering**

* Pick two softwar&#x65;**-**&#x72;elated books a year to read and process carefully
* This includes taking notes, talking chapters through with others, doodle diagrams, trying out, going back, and re-reading. Read rather slowly. Do a chapter or two in one sitting. Take notes or highlight.
* Look for books that go deeper than what you know now. This could be a book on a specific technology, or on software engineering practices.
* Don't go overboard: one book every six months is already great. Pick a book, and spend the time to *properly* read it
* [Here's the list of books](https://blog.pragmaticengineer.com/my-reading-list/) the author has read and is reading

### **Learn the language you use at work in-depth, to the very bottom**

* Whichever your primary stack is at work, go deep into it and learn the internals
* Learn about threading, how garbage collection, performance bottlenecks, and other internals
* This knowledge becomes an advantage both at work, and when interviewing for other jobs
* The more languages you know, the more you can evaluate their strengths and weaknesses. And the more languages you know, the easier it is to pick up new ones - and go deep easier when you need to do so.

### **Pair with other developers more often**

* Pairing with another developer can provide learning leaps that greatly accelerate your development
* Pair to understand how other developer's think and learn from one another
* Pair in order to write better and more maintainable code

### **Write unit tests and run them against a CI**

* Unit testing is essential but in order to understand why you have to experience it saving you
* You need to grunt away, and write those tests, have them run against a CI (continuous integration)
* If you are just getting started, you can use [Travis CI](https://travis-ci.org) for free
* Good test coverage on your code can really save a project as the team grows and evolves
* The tests protect new developers from breaking things and pushing bugs to production
* Tests allow you to make huge refactors and re-designs without fear

### **Make refactoring a habit and master refactoring tools**

* Learn how to comfortably do both small and large refactors
* Learn your IDE really well and how to use the editor to make refactors easier
* Extracting a method, renaming a variable, moving into a constant
* Make small refactoring a weekly habit

### **Know that good software engineering is experience. Get lots of it.**

* The best software engineers have a mix of learned knowledge and real-world experience. The knowledge you can learn. The experience, you need to go after.
* Look for opportunities to work on different stacks, different domains, and challenging projects.
* Volunteer to work on new projects and try out new technologies as the first in the team
* When you push yourself and work with engineers your senior, you accelerate quickly&#x20;

### **Teach what you learn**

* The best way to learn something is to teach it.
* Write blog posts or create presentations for others in the company or communities
* If you want to learn something well, sign up to do a public talk about that thing
* The nice thing about teaching others is you can only win. Not only will you learn something by teaching, but you'll also help and inspire others.
* Become a teacher and mentor for others. The earlier you start giving back and teaching, the more natural this will come.
