Key habits and things I wish I knew earlier as a developer
Tags: beginners, career, java, javascript
Published: 2019-08-06 05:25:22

##### A listing of key habits and skills that could help you become a better developer

What are some of the things that you wish you knew earlier as a developer? Any habit, book, article or skill? **Please share in the comment section**. 

# Summary
Here is a quick summary of habits and things that in my opinion would make a huge difference if known earlier as a developer. Of course, **It is never too late**

- Efficient use of search engines
- Use modern IDE for increased productivity
- Learn Linux
- Learn Git
- Coding standards matter
- Teach yourself & follow tech trends
- Listen to tech podcasts
- Become proficient in at least one programming language
- Focus on Simplicity
- Learn Design Patterns
- Join communities/forums
- Create professional profiles
- Ask, Ask, Ask
- Solve it in paper first then convert into code
- Document and write tests from start
- Solve puzzles/challenges on regular basis
- Start whiteboarding early on
- Manage your time efficiently
- Protect your personal information
- Follow influencers & companies that inspire you
- Attend tech events, workshops, talks, and hackathons
- Embrace error messages ❤
- Choose the right type of company for internship/career
- First develop a working solution then perfect it iteratively
- SEO yourself

As as usual watch out for the following habits/patterns

- Do not give up so easy! ❤
- Do not copy assignments/projects
- Do not procrastinate — if not now, when?
- Do not ignore other subjects
- Do not get addicted to social networks
- Do not lose hope

{% twitter 1006593168459141121 %}

--- 

# Learning
Learning is a prerequisite to thriving in tech due to the speed at which the industry is evolving. There is always something new to learn.

> Once you stop learning, you start dying — Albert Einstein

### Search efficiently
As a developer, you will use search engines very often and a majority of search engines offer advanced features. See [tips](https://www.lifehack.org/articles/technology/20-tips-use-google-search-efficiently.html) and [infographics](https://mashable.com/2011/11/24/google-search-infographic/#KSYNRsvFuGqG)


### Development IDEs
IDEs such as IntelliJ, Atom come with shortcuts, plugins and features aimed to increase your productivity. Invest a little time to learn how to best use an IDE. 
![](https://thepracticaldev.s3.amazonaws.com/i/3m0nco0f98g3sg24n9kz.png)

### Learn Linux
Installing [Ubuntu](https://www.ubuntu.com/) natively, using [VirtualBox](https://www.virtualbox.org/) or [Windows Subsystem](https://docs.microsoft.com/en-us/windows/wsl/install-win10) for Linux is a piece of cake. Linux/Unix knowledge is a huge plus.

### Learn Git
[Git](https://git-scm.com/) is one of the most popular code versioning tool. I suggest start **Git-ing** as early as possible with your projects and assignments. A great way to learn **Git** is through documentation, article and maybe this [interactive online](https://learngitbranching.js.org/) resource. 
![](https://thepracticaldev.s3.amazonaws.com/i/f4k32j5p354m8s0ccptb.png)

### Teach Yourself
It is a fact that your program of study does not prepare you for real world regardless of university’s ranking, depth of the curriculum or caliber of the professors. Nowadays there is no shortage of learning materials both offline and online.
![](https://thepracticaldev.s3.amazonaws.com/i/1l1ew7iy0pa2bnh62moi.jpeg)

[crunchzilla](http://www.crunchzilla.com/) is a step by step how to code games for beginners. My favourite Youtube channels are [Derek Banas](https://www.youtube.com/channel/UCwRXb5dUK4cvsHbx-rGzSgw), [LearnCode Academy](https://www.youtube.com/user/learncodeacademy), [FreeCodeCamp](https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ) and [CodingTech](https://www.youtube.com/channel/UCtxCXg-UvSnTKPOzLH4wJaQ). Finally, a listing of open courseware on [EDX](https://www.edx.org/), [Stanford Online](http://online.stanford.edu/), and [MIT OpenCourseWare](https://ocw.mit.edu/index.htm) that you could learn from.

### Learn at least one language concretely
At university, I studied C Programming for 2 years from Basics to Advanced Data Structure. It helped build a strong programming foundation and every other language become a mere change of syntax, terminology and structure.


### Focus on Simplicity 
You will be surprised how in-demand simplicity is when it comes to coding and no one admires code that is complex, hard to understand and maintain.

> Simplicity is a prerequisite for reliability. — Edsger W. Dijkstra

{% youtube rI8tNMsozo0 %}

### Coding Standards Matter
It is very common for code to migrate from one dev to another over it is lifespan. It's critical to follow a commonly adopted coding guidelines to ensure that the code is easy to understand, extend and maintain. Click the image below to read my article on **Java Coding Best Practices**.

[![Foo](https://miro.medium.com/max/700/1*I7t4xyisUgXelYijbRegyQ.png)](https://medium.com/@rhamedy/a-short-summary-of-java-coding-best-practices-31283d0167d3)

### Learn Design Patterns 
Similar to coding standards, knowledge of design patterns help you architect close to **immortal** systems (ok maybe not immortal, but you get the point).   
![](https://thepracticaldev.s3.amazonaws.com/i/dtv0rvbhz4p4x2y4b517.png)

### Listen to tech podcasts 
Podcast are great ways to broaden your technical knowledge when commuting, walking, driving and so on. I would **highly** recommend checking out the [Software Engineering Daily](https://softwareengineeringdaily.com) podcast. 

---

# Communities & Profiles
Communities are where you network with like minded professionals, learn and give back.

### GitHub
Creating a profile allow you to setup your own repos, **follow** inspiring contributors, appreciate others work by **staring** their repository, and most importantly **contribute** back to the open source projects. Here is my [GitHub](https://github.com/rhamedy) profile. 

How to contribute? You can report a **bug**, write **documentation**, answer **questions**, fix **issues** and create **new features**.

*It’s worth-mentioning that, employers favour open source contributors.* 

### StackOverflow
[StackOverflow](https://stackoverflow.com/) is the largest Software Development Q&A website. A SO profile is good to have. See Rob’s [comment](https://medium.com/@robmuh/i-take-strong-exception-to-every-premise-motivation-and-conclusion-of-this-article-df658bfba8ad) on its significance in interviews.

- Ask difficult & meaningful questions
- Answer questions
- Upvote useful questions/answers

### LinkedIn 
A [LinkedIn](https://www.linkedin.com/) profile is the first step towards building your online presence.

- Build your professional network
- Subscribe to updates from companies & influencers
- Explore jobs, write and read posts

Similarly, [AngelList](https://angel.co/) and [IndieHackers](https://www.indiehackers.com/), Reddit are great communities to be a member of. See my profile below for my profiles. 

{% user rhamedy %} 

--- 

# Habits
Developing a few habits early on would greatly help you down the road. I highly recommend reading The [Power of Habit](https://charlesduhigg.com/the-power-of-habit/) by Charles Duhigg.
![](https://thepracticaldev.s3.amazonaws.com/i/3f0g28bip4a2e9s5ds4h.png)

1. Tech is a fast-paced industry. **Stay up to date** with social networks & sites such as [slashdot](https://slashdot.org/) & [techcrunch](https://techcrunch.com/). 

2. Don’t be shy! **Ask for advice** from those with expertise

3. Always plan and **solve the problem in paper** and then write the code. This is very powerful.

4. Write code that aligns with industry adopted **coding standards**. Start writing tests early for assignments, projects.

5. Develop a habit of **solving puzzles/challenges** on regular basis. This will serve you dearly whether it’s interview, your job, side project, etc.

6. **Whiteboarding** skill never let you down whether it is interview, on the job. Probably one of the most overlooked skill.

7. Understand **how much time you have in your hand** and use it wisely. Do the math, **calendar block tomorrow** and use **RescueTime/Toggl** if you are comfortable with their Privacy Policy.

8. Protect your identity by reading **privacy policies, terms of services**, using VPN & Encryption, password manager, enabling 2FA, and so on.

---

# Socializing & Networking
There are many benefits to networking and socializing such as
![](https://thepracticaldev.s3.amazonaws.com/i/7aqzjr6e6qzwgje7o7eu.gif)

- Build your professional network
- Get inspired and inspire others
- Learn about the dev communities, jobs, mentoring, volunteering, etc
- Find your co-founders and project partners
- Improve your soft skills i.e. speaking, active listening, and so on.

We are well past the era of **one man army**, it is all about **teamwork** now. Get to know people of all expertise i.e. legal, finance, sales, marketing and so on. It will come handy in the future be it side projects, change industry, etc.

If you find networking difficult, I recommend reading self help books i.e. [Quiet: The Power of Introverts in a World That Can’t Stop Talking](https://www.goodreads.com/book/show/8520610-quiet) and there is a ton of tips and advice on internet.

### Follow Influencers & Companies
Put social networks into good use. Follow people and companies that inspire and remind you of your dreams and goals. I use social networks to

- Stay connected with family and friends
- Read updates from companies such Google, Microsoft, Apple, United Nations, Amazon, Netflix, [SpaceX](https://www.linkedin.com/company/spacex/), Tesla, and so on.
- Follow public figures like [Elon Musk](https://en.wikipedia.org/wiki/Elon_Musk), Bill Gates, Leonardo DiCaprio, [Jeff Atwood](https://stackoverflow.com/users/1/jeff-atwood), [Dan Abramov](https://twitter.com/dan_abramov), [Dave Syer](https://github.com/dsyer), [Evan You](https://github.com/yyx990803), [Vitalik Buterin]() and so on.
- Attend monthly meetups (i.e. [Hackernest](https://hackernest.com/)), workshops, talks, hackathons

### Side Projects
Act on your ideas. The chances that someone else is thinking about it is very high.

- Pick that great idea and do a feasibility and market research
- Connect with your professional network to find partners & co-founders
- Work in your free time while maintaining a healthy work/life balance & don’t forget to see the idea through completion
![](https://thepracticaldev.s3.amazonaws.com/i/49myb1yp9u7bcaz7dj5p.jpeg)

--- 

# Researching
As a Software Developer you will be constantly learning and researching. Give yourself the **habit of reading the documentation first** and if that did not help then search for other learning materials such as examples, tutorials, etc.

### Error Messages
Don’t be disappointed when you come across an error message. Learn **What is it about? When does it happen?** and **How to handle it gracefully**?

### Choose the right Company
Recently, I came across this [article](https://medium.com/swlh/advice-to-new-software-developers-ce4444943b9a) by Brenn where he explains the benefits of working for a **Product vs Consulting** company — Might help decide your next career/internship option.

### SEO Yourself
Have you ever googled yourself? Is your personal information safe? Is your public information easily accessible? Use the magic of search engine to achieve your objectives whether it’s sharing wisdom, promoting your brand, attracting followers, or spreading awareness.

--- 

# Things you should avoid
It takes time to build and remove habits.

### Do not give up easily 
There are different cues that lead to giving up. As a software developer you will easily come across

- Annoying issues
- Poor legacy code
- Learning other languages, tools, and domain knowledge
- Working with people who have different coding habits, opinion, etc

It is generally a good habit not to give up and keep trying but, don’t be stubborn and understand when is the right time to let go and move on.

When it comes to coding, if you are on the verge of giving up, try following

- Take a break and come back later or the next day
- Try solving it on paper
- Ask for help from those with expertise

### Do not copy assignments
When I started my computer science degree, the first C programming assignment was *“Write a program that computes x^n (x to power of n) using + (plus) and — (minus) operators where x and n are integers provided by the user”*.

It took me a long time with no access to internet to find a solution on paper. I learned not to give up and keep trying and the future assignments become easier and easier.

### Do not fall for social network addiction
Believe it or not, a majority of social networks are powered by algorithms that have one goal — **Increase the ROI for the company using your time**.

### Do not lose hope, you are smarter than you think
Lastly, feeling hopeless and worried is going to be a frequent visitor and you will have to learn how to deal with it. Here are a few points in your defense

- Don’t let knowledge gap make you worry or hopeless — see article below
- Don’t be intimidated by those who are better — You will get there
- Don’t lose hope for not knowing everything i.e. AI, Machine Learning, Blockchain, etc — you will learn them eventually

[Dan Abramov](https://medium.com/@dan_abramov), one of the developers I follow is the co-creator of famous Redux framework wrote the following [article](https://overreacted.io/things-i-dont-know-as-of-2018) that I consider a great read.

{% twitter 972495616600293381 %}

---

# Other Articles
So far, I have written the following articles 

{% link https://dev.to/rhamedy/how-to-load-test-a-developer-s-guide-to-performance-testing-4e8m %}

including [A short summary of Java coding best practices](https://medium.com/@rhamedy/a-short-summary-of-java-coding-best-practices-31283d0167d3) on medium.

This article is a port-over plus some additions and changes of the [original article](https://medium.com/@rhamedy/key-habits-and-things-i-wish-i-knew-earlier-as-a-developer-43c9466a0407) from medium that has nearly 9K claps. 

*Note: None of my medium articles are metered. Paywall is the reason, why I am exploring dev.to* 

---

# Relevant articles

1. Finally, some relevant articles for those who wish to read more. One of my favorite articles on [25 Tips for New Developers](https://zen-of-programming.com/start-programming/) by Ali

2. A must-read article [Advice to new software developers](https://medium.com/swlh/advice-to-new-software-developers-ce4444943b9a) where he touches on Product vs Consulting company for career/internship.

3. [What New Developers Should Really Focus On](https://medium.com/@lydiahallie/what-new-developers-should-really-focus-on-9da2eb5cf10c) by Lydia who also wrote another [article](https://medium.com/@lydiahallie/advice-from-a-19-y-o-girl-software-developer-88737bcc6be5) that might resonate to new developers.

4. Some great tips by Stephen on his [blog post](https://www.codingdojo.com/blog/7-tips-learn-programming-faster/) (Code by hand — my absolute favorite, take breaks when debugging)

5. Another [15 Tips for Junior Developers](https://www.codementor.io/learn-programming/15-ways-to-improve-as-a-junior-developer) by Natasha on her blog (Separate your concerns i.e. SRP, write short methods, find a mentor)

6. Some [amazing tips](https://dev.to/emadmokhtar/advice-to-junior-developers-4hhk) by Emad on his blog (i.e. contribution to open source, asking asking, writing blogs, etc)

Thank you for reading and sharing your comments! Follow and connect with me over social media networks for future articles.