Learning Software Development

Posted by Mike Barkas on Monday January 01, 2018

Learning Programming as a Career

I am starting this year off with a less technical article for people that may be interested in learning how to be a software developer or someone who has just begun their computer programming career.

I am sharing my opinion of a few concepts to consider when first learning software development. There are many topics I don't cover in this article, and even more opinions on these topics, but here are a few of my thoughts.

First Language

Your first programming language should be a language that is easy to get started in. A language that does not take a lot of configuring of your computer or need to install multiple tools.

I suggest to use Python as your first language. Python requires no special setup or Web server configuration and is installed in most operating systems. It has an easy to read syntax and a very extensible standard library that allows you to experiment in areas of technology that interest you. Python also has a great community of people.

Finding your Interests

Almost everything nowadays is integrated with software in some way. The only way to find an area of programming you enjoy is to try different types of programming. There are endless choices for example Web development, computer networks, mobile apps, IoT (Internet of things), desktop applications, machine learning, robotics, operating systems, data science and on and on.

Experiment with and learn about different areas that interest you and be adaptable to change. As you learn more your interests may change and technology changes quickly as well. Don't get distracted by every new shiny framework or library that comes out.

Don't hesitate to look "under the hood" and see how things work with the language you are using. Reading the source code helps quite a bit and don't be afraid to ask questions. Once you understand the basic concepts of your language learning other programming languages can be straight forward as it is common for higher-level languages to be build with the same lower-level language constructs.

Ways to Learn

There are many places to find tutorials on the Internet. There are also free and paid video lessons on development and programming languages. You can find example programs or coding challanges on the Internet that may help you get started. Programming is a skill, and like other skills, requires practice.

Initially learn the concepts of data structures and practice building small programs or scripts to build your fundamental skills. Finding a repetitive task in your daily routine and write a program to do it. Then try to automate it.

Another important aspect is collaborating and learning with other people. Finding a mentor can sometimes be helpful. You can learn from other people by asking them for help, but you can also learn a lot by teaching someone else a concept that you can help them with.

Join local meeting groups in your area. Find Meetups or other organizations in your local area and join a few. You can learn and teach others with similar interests and build human relationships. If there is no Meetup in your area, start one.

Go to conferences on software and technologies you are interested in. There are large conferences and there are also smaller regional conferences that may be more affordable. Sometimes smaller conferences can be easier to meet people and are more personalable.

Attending conferences has many benefits like attending talks on specific topics of interest, and meeting the presenters and maintainers of larger projects. Going to conferences and Meetups is a great way to meet and learn about the people in that software community. Another great thing to do at conferences or Meetups is to volunteer. Most conferences, large and small, are done by volunteers. This is a great way for you to give back to the software community that you are a part of.

Working In A Team

You will not get much experience working by yourself forever. You have to learn to program in a team with developers, project managers, and other people involved in the software development lifecycle.

Teams of developers work on the same set of files with the use of software version control systems (VCS) or known as version control. This is how developers from all parts of the world share and work on a single code base.

There are multiple types of software version control systems. In my opinion the most popular software version control is Git. There are plenty of tutorials online to get you started with the basic concepts. I suggest you practice learning code branching and merging by creating a free account online with Github, Bitbucket, or Gitlab. You can practice version control with yourself or find someone else that is also learning and practice together. Practice making version control mistakes and fixing merge conflicts with sample code or simple text files to learn. I also suggest learn what makes a quality commit message for your software changes.

After you have basic experience with git, find an open-source project that you enjoy using and help with maintenance. Start simple with documentation fixes or improvements (docs are part of the code base). The maintainers will appreciate your help and you will gain great experiences.

Soft Skills

You won't be coding 100% of your time as a developer. You will spend a large portion of your time collaborating with project managers and other developers. You will also be writing documentation and possibly some type of ticketing system or issue tracker.

Having soft skills is important for verbal and written communications with people you work with. Understanding when not to use technical software terminology, and when it is appropriate, is in the context of your meetings with your co-workers.

Tools

You will need to retain lots of information during your software development career. I suggest a quality password manager to help with the large number of accounts you may have. A way to keep all your resources in a central place is also important. A note taking app to create a single location for your notes and code snippet examples could be helpful.

You will have to write your code with some kind of application. Initially use something that is simple to use to get you coding. Start with a basic text editor. Many text editors have plugins available for additional functionality. Experiment with these plugins as you gain experience.

Integrated Development Environments (IDE) are large software development applications with many built in tools for working on large software projects. Take a little time to understand at a high level what IDEs are and how they compare to text editors. After some experience you will eventually be able to use different IDEs as you learn different languages. It is common for IDEs to be specific to a language and or an architecture.

You may see people express their opinions of what text editor or IDE is the best. These are their opinions and you can use what you are most productive and comfortable with. You will eventually be using many different tools as you learn different programming languages and computer architectures.

Many of the text editors or IDEs and other tools provide a free version to evaluate and try their software. This will allow you to experiment with different tools and applications for development. It is common to pay for software licensing when you find quality tools that help with your productivity and keep up with the software updates of your tools.

Final Thoughts

Software development is a constant learning process for your entire career. If you don't like learning new concepts and learning to solve problems or troubleshooting software, then you may want to rethink programming as a career.

Software development is not all about coding. Computer language syntax and software constructs is straight forward. You also have to work with many different people in different contexts, making soft skills an important factor.

Remember for any area of technology or programming you are in, there will always be someone who knows more than you and someone who knows less than you.