10 Technical Skills to Learn

Start Building Your Software Development Capabilities

Feeling inspired to build something new? Excellent. To build a prototype, you’ll need the right tools. Not an expert software developer yet? You have to start somewhere. The idea here is to build something that can illustrate your idea. Doesn’t have to be perfect. Along the way, you’ll learn, have fun, and refine your idea. Let’s get started.

1. CS Core – Database Design

Most software development projects involve using data at some point. So, you’re probably going to need a database management system (DBMS). To start, learn the fundamentals of relational database design. If you dive straight into database development without a good handle on best practices in database design, you’re inviting headaches. The two models of database design are logical and physical. The structure of a relational database includes: tables, indexes, views, stored procedures, and triggers. A database table consists of rows and columns. Each row in a table has a unique key. There are seven primary steps in relational database design:

  • Organize information required
  • Divide the information into tables
  • Turn information items into columns
  • Specify primary keys
  • Set up the table relationships
  • Refine your design
  • Apply the normalization rules

Along the way, you’l learn to classify data and identify relationships. There are three classic types of relationships: one-to-one, one-to-many, and many-to-many. To learn more, the book, “Beginning Database Design: From Novice to Professional” by Clare Churcher is very helpful.

2. Special Topics: Artificial Intelligence

AI is everywhere these days. Start learning the fundamentals of AI and see where your curiosity takes you. Along the way, you’ll want to learn the basics of machine learning, deep networks, convolutional networks, recurrent and recursive nets, computer vision, speech recognition, natural language processing, representation learning, and deep generative models. The book, “Deep Learning” by Ian Goodfellow et al is interesting reading.

3. Programming Languages: Python

At some point, you’ll want to roll up your sleeves and write code. With so many programming languages to choose from, where to start? Consider learning Python. Python is an interpreted, high-level, general-purpose programming language that’s easy for beginners to learn. Python has a wide range of uses including: task automation, web application development, data science, and artificial intelligence. Python supports multiple programming paradigms, including structured (procedural), object-oriented, and functional programming. There are two main series of Python, version 2 and 3. Note that release 2.7.18 is the last release of Python 2, which was officially discontinued in January 2020. Python 2 is no longer supported and there will be no further updates or bug fixes. As a result, focus on learning Python 3. Along the way, you’ll learn about functions, data structures, algorithms, design patterns, classes, methods, and working with files and databases, and web development. The book, “Think Python: How to Think Like a Computer Scientist” by Allen Downey is a good place to start.

4. Database: PostgreSQL

Database management systems (DBMS) come in a variety of types, including: relational (RDMS), full text, and NoSQL. Types of NoSQL databases include: key-value store, document-oriented, graph, object, tabular, tuple store, RDF, and column-oriented. Consider starting with an easy to learn RDMS like MySQL or PostgreSQL. PostgreSQL is a good choice for beginners, and it also works well for production-grade systems. You may be wondering, what about MySQL? MySQL is fine for small-scale use, but in a large-scale production system, the licenses for the MySQL cluster and enterprise editions can cost thousands of dollars. It’s not that you shouldn’t use MySQL at all. Many folks still use MySQL for prototyping in a development environment. Consider learning PostgreSQL. It has excellent features, it’s free and open source, and you can use it in any environment without any license fees.

5. Development Approaches: Agile

Software development requires collaborative teamwork, and many development teams embrace Agile approaches. Agile is primarily a product development approach, not a methodology or process, and is grounded in values and principles. Agile is not a project management framework, nor should you attempt to use it as one. (There are project management frameworks for that.) The four major principles of the agile approach are noted in the Agile Manifesto, which are:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Agile frameworks contain a workflow, methods, or processes to support teams in responding to the unpredictability of developing software. Examples of Agile frameworks include: Scrum, XP, Lean, and Kanban. Scrum uses incremental, interative sequences of work, called sprints, which typically run for one to four weeks. Sprints end with a demo meeting, which is an opportunity to walk through the software product with the product owner. Scrum uses regular, fixed length sprints. In contrast, Kanban uses a fan-in and fan-out process in which developers pull user stories from the Kanban board and funnel them through development to create the software product. Rather than use fixed length sprints, Kanban uses a continuous flow to deliver product capabilities on an as-need basis. Even if you’re only working as a solo developer, using processes from an Agile framework like Scrum or Kanban can be helpful, such as implementing clearly defined, small chunks of work, executing work in sprints, using a Kanban board, and refactoring code frequently.

6. Front End Development: Django

Code completely from scratch or use a web framework? If you’re trying to quickly build a prototype of a web application, you might want to consider using a web framework. There are a variety of web frameworks that are full stack, which means that they support both the front end and the back end (server side). Examples include: Spring MVC, Ruby on Rails, and Django. Since you’re learning Python, you might consider Django, as it’s built with Python.

7. Back End Development

Django can be used for back end development, including APIs. Its features include a stateless authentication mechanism that protects an application from third-party attacks. And Django connects to databases easily. However, at some point, you may want something more than Django on the back end. Consider exploring an additional back end framework at some point, like: Spring Boot or Express.js/Node.js. Spring Boot supports writing production-grade back end web applications in Java, including development of microservices. Or consider a framework based on JavaScript, like Express.js, which is a Node.js framework for backend web development. Express.js is part of the MEAN stack. The MEAN stack includes MongoDB, Express.js, AngularJS, and Node.js. Don’t worry though, when you’re just starting out, Django is usually just fine.

8. DevOps: Docker

Docker uses virtualization to deliver software in packages called containers, which are isolated from one another and bundle their own software, libraries and configuration files. By using a virtual container, Docker packages an application and its dependencies so that it can easily run on any Linux server, which makes deployment much easier. Due to the lightweight nature of Docker containers, a Linux server or virtual machine can run several Docker containers at the same time without issues.

9. Infrastructure: Ubuntu + AWS

Using an operating system that’s stable, highly configurable, and easily secured is awesome. Ubuntu is an excellent operating system for a development notebook or desktop workstation, local server in the lab, remote server, virtual private server (VPN) or a cloud server. Consider replacing Windows on your notebook with Ubuntu for a faster, more stable system. Works great. Ubuntu is excellent in the cloud, as well. AWS supports a variety of operating systems, including Ubuntu. AWS offers an extensive portfolio of services. A good learning path to start with includes: AWS VPC, EC2 (Elastic Compute Cloud), S3 (Simple Storage Service), RDS (Relational Database Service)

10. Tools: Git

In software development, using a version control system is essential to save your code locally and remotely, track changes in code, and share your code with others. There are a variety of version control systems including: Microsft Team Foundation Version Control (TFVC), Concurrent Versioning System (CVS), Mercurial (hg), Subversion (SVN), and Git. These days, most teams use Git, which is a free and open source distributed version control system. Git is free and open-source. Git repositories are available as a service, including: GitHub, SourceForge, Bitbucket and GitLab. You’ll want to get comfortable using Git on the command line, as well as using a GUI at some point. There are good tutorials on setting up and using Git available on the web.

Stop dreaming and start building. It’s time.