How to Develop Software
How to Develop Software
Being a software developer is a lucrative career plan. Those are people with some serious marketable skills. But what exactly are they doing? Since you probably can't beat 'em, you'll have to join 'em. Do you have the tech-savviness and the audience relatability to develop a good product? With a bit of brainstorming -- and, of course, starting with Step 1 below -- you will!
Steps

Learning the Ropes

Determine which basic type of software development interests you. There are two basic TYPE camps of software development: Applications Development and Systems Development. Applications Development is focused on creating programs that meet the users' needs. These can range from mobile phone apps, to high-production video games, to enterprise-level accounting software. Systems Development is focused on creating and maintaining operating systems using life-cycle development. Systems Development often involves network operability and data security.

Teach yourself a programming language. Anyone can come up with ideas, but a developer will be able to turn those ideas into something tangible. Even if you only want to work on the design aspects of software, you should have some familiarity with coding and be able to create basic prototypes. There are a huge variety of programming languages that you can teach yourself. Some of the more useful and important ones include: C - C is one of the older languages still in use, and is the basis for most of the other languages on this list. C is used to develop low-level programs, and works very closely with the computer's hardware. C++ - This is the object-oriented version of C, and is the most popular programming language in the world. Programs such as Chrome, Firefox, Photoshop, and many others are all built with C++. It is also a very popular language for creating video games. C++ developers are almost always in very high demand. Java - This is an evolution of the C++ language, and is used to due its ease of portability. Almost any system can run a Java Virtual Machine, allowing it to run Java software. It is widely used in video games and business software, and many people recommend it as an essential language. C# - C# is a Windows-based language that is part of the .NET framework from Microsoft. It is closely related to Java and C++, and if you learn Java you can quickly transition to C#. This language is especially useful for developers working with Windows or Windows Phone software. Objective-C - This is another cousin of the C language that is specifically designed for Apple systems. It sees immense popularity in iPhone and iPad apps. It is a great language to learn as a freelancer. Python - This is an incredibly easy language to learn, one of the easiest. Python specializes in web development. PHP - This isn't exactly software development, but PHP is essential if you are interested in getting into web development. There is always lots of work for PHP developers, though it isn't as lucrative as software development.

Find resources to help you learn. Most bookstores have entire sections dedicated to programming books, and there are tons available on Amazon and other e-tailers. A well-written programming book will likely be the best resource you can have, and will allow you to quickly reference it while working on projects. Beyond books, the internet is an endless treasure-trove of guides and tutorials. Search for guides on the language of your choice on sites such as CodeAcademy, Code.org, Bento, Udacity, Udemy, Khan Academy, W3Schools, and many more.

Take some classes. While you don't need a full-on degree in order to get into software development, it can't hurt to take a few classes at your local community college or learning center. This will give you the benefit of one-on-one instruction, and you will be challenged to solve problems that you likely wouldn't if you were learning on your own. Classes cost money, so make sure that you are signing up for classes that will help you learn what you want to know. While many developers are able to enter the industry based purely on the merits of their skills, you'll help yourself stand out from the pack if you have a bachelor's degree in computer science from a four-year university. A degree will give you a wider background of knowledge and will give you access to additional helpful classes such as math and logic.

Work on pet projects. Before you start trying to apply your new programming skills to real-world jobs, work on some projects for yourself. Challenge yourself to solve problems using your programming language. Not only will this help develop your skills, it will also help build your resume. For example, instead of using your computer's calendar program to stay organized, try designing your own! If you're interested in video game development, work on simple games that don't focus on graphics or complex mechanics. Instead, focus on making them fun and unique. A collection of small games that you created yourself will look great in your portfolio. EXPERT TIP Gene Linetsky, MS Gene Linetsky, MS Startup Founder & Engineering Director Gene Linetsky is a startup founder and software engineer in the San Francisco Bay Area. He has worked in the computer science industry for over 30 years, with experience spanning staffing and management of engineering teams, game design and development, communication protocols, sales automation, and more. He has also been involved in incorporating computer science curriculum into high schools, developing educational software, and was a co-author on a computer science textbook. He is currently the Director of Engineering at Poynt, a technology company building smart Point-of-Sale terminals for businesses. Gene Linetsky, MS Gene Linetsky, MS Startup Founder & Engineering Director Hands-on experience is your best learning tool. According to Gene Linetsky, a software engineer and startup founder: "Being a software engineer isn't having the ability to program; it's everything else that's required to make your code into an actual product used by actual people. Then, when you do that, your clients will usually come back and say, 'This doesn't work,' or 'That doesn't work.' The cycle of maintaining your own stuff is the real education of a software engineer."

Ask questions. The internet is a fantastic way to connect with other developers. If you find yourself stumped on one of your projects, ask for help on sites such as StackOverflow. Make sure that you ask in an intelligent manner and can prove that you have already tried several possible solutions.

Practice every day. Work on your pet projects every day, even if only for an hour. This will help you stay fresh and constantly learn new techniques. Many developers have had success learning a language by ensuring that they are exposed to it on a daily basis. Set a time every day that you can dedicate to coding, or set a deadline that you need to be finished by. Try to work on your projects every day during the week so you can relax on your weekend.

Developing a Program

Brainstorm ideas. A good program will perform a task that makes life easier for the user. Look at the software that is currently available for the task you want to perform, and see if there are ways that the process could be easier or smoother. A successful program is one that users will find a lot of utility in. Examine your daily tasks on your computer. Is there some way that you could automate a portion of those tasks with a program? Write down every idea. Even if it seems silly or outlandish at the time, it could change into something useful or even brilliant. Examine other programs. What do they do? How could they do it better? What are they missing? Answering these questions can help you come up with ideas for your own take on it.

Write a design document. This document will outline the features and what you intend to achieve with the project. Referring to the design document during the development process will help keep your project on track and focused. See this guide for details on writing the document.

Create a prototype. This is a basic program that shows off the functionality that you're aiming to achieve. A prototype is a quick program, and should be iterated on until you find a design that works. For example, if you are creating a calendar program, your prototype would be a basic calendar (with correct dates!) and a way to add events to it. Your prototype will change often during the development cycle as you come up with new ways to tackle problems or think of an idea later that you want to incorporate. The prototype doesn't have to be pretty. In fact, art and design should be one of the last things you focus on. Using the calendar example again, your prototype should most likely just be text.

Test it over and over. Bugs are the bane of every developer. Errors in code and unexpected usage can cause all kinds of problems in a finished product. As you continue to work on your project, test it as much as possible. Do everything you can to break it, and then try to keep it from breaking in the future. Have friends and family test your program and report back results. Any way that you can get feedback will help your development process. Try inputting odd dates if your program deals with dates. Really old dates or far future dates may cause odd reactions with the program. Input the wrong kind of variables. For example, if you have a form that asks for the user's age, enter in a word instead and see what happens to the program. If your program has a graphical interface, click on everything. What happens when you go back to a previous screen, or click buttons in the wrong order?

Polish your projects. While it's fine to make a rough project for the prototyping and development phase, if you want others to use it you're going to need to spend some time on polish. This means making sure the menus flow logically, the User Interface (UI) is clean and easy to use, there are no glaring or showstopping bugs, and that it's coated in a nice looking finish. UI design and functionality can be very difficult and complex. People make whole careers out of designing UIs. Just make sure that your personal project is easy to use and easy on the eyes. A professional UI may not be possible without a budget and a team. If you have the budget, there are lots of freelance graphics designers who could potentially design a UI on contract for you. If you have a solid project that you're hoping will become the next big thing, find a good UI designer and make them part of your team.

Put your projects on GitHub. GitHub is an open-source community that allows you to share your code with others. This will allow you to get insight on your own code as well as benefit others who are looking for solutions that you may have come up with. GitHub is a great learning resource as well as a good way to build your portfolio.

Distribute your software. Once you have a finished product, you can choose whether or not you want to distribute it. There are a variety of ways you can do this these days depending on the type of software you created. One of the most common ways for small teams or independent developers to distribute their software is through a personal website. Make sure that all of your features are well-documented, and include some screenshots and tutorials. If you are selling your software, make sure you have a good digital payment system and a server to distribute the software from. If you are developing software for a specific device or operating system, there are multiple digital stores that you may be able to use. For example, if you are making software for Android devices, you can sell your app through the Google Play Store, the Amazon App Store, or your own personal website.

Getting Work

Take contract jobs. Although these won't pay as well and are less reliable than full-time employment, you can significantly bulk up your portfolio by taking a series of contract jobs. Check sites like Elance and ODesk (Also known as "Upwork" now) to find work. While it can be difficult to get considered for a contract, once you get your first one it gets a lot easier. Hacker News is a great resource for contract and freelance jobs. Check the "Ask" section. While it can be tempting to bid low to secure a contract job, don't sell your services short. Not only will you end up working more for less than you deserve, you will also anger others in your field, leading to less networking. Good work on a contract job can sometimes lead to a full-time position. Always put your best foot forward!

Network as much as possible. Attend as many conventions and hack-a-thons as you possibly can. Not only will this expose you to more code and problems to solve, it will also help you meet other people in the industry. Despite what you might think about programmers working alone in their basement, the majority of full-time developers are part of a team and networking is just as important as any other field.

Apply for full-time positions. Once you have a few contract jobs under your belt, you can start sending your resume and portfolio out to larger organizations for full-time employment. Besides Monster and Indeed, there are a variety of developer-specific job sites that you should be looking at, including GitHub Jobs, StackOverflow Job Board, AngelList, CrunchBoard, Hirelite, and Hacker News.

Diversify your skillset. A good software developer is usually proficient in more than one language. While a lot of what you learn will be on the job, use some of your free time to expand your knowledge and learn the basics of another language or two. This will make transitioning to new projects much easier and will make you a much more desirable job candidate.

Don't worry about the pay. Not every entry-level software development job is going to pay six figures. In fact, none of them will. The good thing about software development, however, is that the job market is incredibly strong. If you feel like you aren't earning enough where you're at, it is relatively easy to move to a new position in a new company (if you have the skills). Treat your first few jobs as necessary experience instead of focusing on your retirement plan.

What's your reaction?

Comments

https://chuka-chuka.com/assets/images/user-avatar-s.jpg

0 comment

Write the first comment for this!