/list-of-dev-things

A repository containing lists of concepts, tutorials etc to be able to do development: aimed at beginners.

MIT LicenseMIT

List of things to learn

Join the chat at https://gitter.im/drvinceknight/list-of-dev-things

A repository containing lists of concepts, tutorials etc to be able to do development.

I often take on students at the beginning of their coding 'careers' and this repository is meant to be a list of things that they should learn/take a look at before getting started. Pull requests welcome.

In general the development I do is either for python.

General concepts

Here are some basic language agnostic things:

Text editor

Get a good text editor.

  • Here are some great options:
    • atom - has a bunch of plugins and can be hacked easily using css etc...
    • sublime - a favorite of many. I can't say I've used it myself.
    • geany - friendly though mighty and cross-platform.
    • VS Code - an open-source editor released by Microsoft. Built in support for git, good selection of extensions.
  • Students often ask what I am using: I like to use vim but this has been historically referred to as having a steep learning curve. The plugins and ability to work right in the terminal are a huge strengths.

There are various other options (please do add them via pull request).

Choose a good editor and most importantly realise that it is a very powerful tool that (if you have chosen a good one) will do far more than just edit text.

Terminal

The terminal is an interface to your computer that allows you to do a variety of things through text based commands. This might seem archaic but once you are used to it you will not want to use anything else. Developing a graphical user interface is a step that a lot of great software has not taken so you would be surprised by the amount of great tools available to you on the command line (another word for terminal).

If you are using a linux machine you are probably familiar with a good terminal tool. If you are using Mac OS then take a look at iterm2. If you are using Windows take a look at the section at the end of this file that is about using Windows.

Here is a good tutorial.

Git and github

When doing software development you need to use a 'version control' system. This allows you to keep track of what you're doing and also to 'merge' your changes in to the changes of others.

The most popular version control system at the moment is one called git. It comes with a bit of a learning curve but here are some videos/tutorial to get you started.

This is probably worth reading first (it gives an overall description of what version control is):

Here are some tutorials:

Although you'll want to become proficient at driving Git via the command line, it can often be useful to have a graphical tool for those occasions when you are uncertain of the correct command. SourceTree is a free, cross platform desktop Git client which you may find useful.

When using git it is helpful to have 'remote repositories' a good place for this is a website called github. This is used by coders all over the world to share code (and easily contribute to other's code). Another good option is gitlab (although I generally mainly use github).

It is worth setting up an account on github. Here are a few things that might be helpful:

If you are a student then sign up for github's Student Pack

Testing

When writing code it is very important to write automated tests. This is a good book that takes you through the concepts for Django and Python: http://chimera.labs.oreilly.com/books/1234000000754 but I need to find some better (smaller tutorials).

When using tests and github it's great to also use travis.

Markup languages

Markdown is a language worth learning to be able to neatly write on github issues etc...

There are various other markup languages (html, LaTeX, rest etc...) but I do not consider them to be fundamental (they will be listed where relevant in this repository).

Windows

If you are using Windows, here are some basic things I recommend:

  • Install the windows git client.
  • Install Anaconda (for Python) this will also give you Anaconda prompt. Which is a sufficient command line tool for all python development and git interfacing.
  • The original Command Prompt runs commands and scripts in the MS-DOS scripting language. It's old, but there's lots of material online to help you
  • Windows Powershell is built into all modern versions of Windows and gives you a far superior, modern, object-oriented scripting language and a far better terminal.
  • ConEmu is a very powerful, free and open source terminal program.
  • If you want to use a Linux based interface to your Windows machine, you can install Cygwin which will give you most of the common Linux tools and commands.

See windows/README.md for more details about Windows software.

Using the cloud

If you are using Windows and/or have other reasons you can do a lot of development right in your web browser.

There are a variety of options but I am a big fan of cloud.sagemath. In particular if you want to develop for sagemath this is an excellent option.

Communication

There are various tools I like to use for communicating during a project.

  • Quick text based messages:

    • Slack is slowly becoming an industry standard: slack.com/.
    • Another great option is gitter. Again, has a mobile app and also interfaces very nicely with github repositories. You can find the gitter room for this repository here.
    • irc is very popular in the open source world. I can't say I'm the biggest fan but it's a great place to drop in and speak to people.
  • github issues. When using github for a project it comes with a nice interface to raise a so called 'issue' which allows for a public record of a conversation. This is very helpful and worthwhile in a development process as at some point down the line it might be helpful to remember why something was decided. It's always good to open an issue for a feature before starting to work on it.

  • Emails (they do a job).

  • Virtual meetings: Very rarely are face to face meetings a regular requirement. I like to use hangouts for these but again there are a variety of options.

  • urls: when working remotely it's very helpful to be able to just paste links to something that brings it up in the receivers browser. There are various tools for this:

    • Github (just grab the link from the particular file)
    • Gists (for throw away pieces of code)
    • Dropbox (if you have something in a dropbox folder you can use the 'share a link feature' - this is partcilarly helpful and quick for screenshots)

Contributing to this repository

I would be delighted for contributions to this repository:

  • If you are a student who has worked with me and feel that I am leaving something out or indeed that there are useful tutorials/videos etc then please do add them via pull request.
  • All other contributions are of course welcome, please keep in mind that I am attempting to build a fairly generic list for students assuming only a very basic knowledge of writing code.

Please do raise an issue if you're not sure if something is worth having.