O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Tips and Tricks for Increased Development Efficiency

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Linux
Linux
Carregando em…3
×

Confira estes a seguir

1 de 24 Anúncio

Tips and Tricks for Increased Development Efficiency

Baixar para ler offline

Short presentation targetted at university students showing some tools and software that are usually not talked about in courses which helps development productivity.

Short presentation targetted at university students showing some tools and software that are usually not talked about in courses which helps development productivity.

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Tips and Tricks for Increased Development Efficiency (20)

Anúncio

Mais recentes (20)

Tips and Tricks for Increased Development Efficiency

  1. 1. Tips and Tricks for Increased Development Efficiency or, “things you will probably not learn in university” Olivier Bourgeois Mount Allison University February 12, 2018
  2. 2. Content ● Introduction ● A Note for Windows Users ● A Note for macOS Users ● Modern Shells ● Terminal Multiplexer ● Personalize Your Dotfiles ● Useful Commands ● Misc FAQ ● Closing Words
  3. 3. Introduction As a computer science student at university, you know a lot about algorithms. What about everything that surrounds writing these algorithms? I’ll be walking through a high level overview of terminals, shells, multiplexers, as well as a decent amount of useful commands and flags. What about an example of a highly useful command? fortune -s | cowsay | lolcat
  4. 4. A Note for Windows Users Avoid using Windows* *Linux Subsystem for Windows 10: https://docs.microsoft.com/en-us/windows/wsl/install-win10
  5. 5. A Note for Windows Users Three main reasons to move to a Unix system for development: 1. Package managers 2. Shell scripting 3. Less friction interacting with other Unix systems ● Ubuntu: https://www.ubuntu.com/download/desktop ● Mint: https://linuxmint.com/download.php ● macOS: https://www.apple.com/ca/mac/
  6. 6. A Note for macOS Users macOS is based off a branch of Unix, but by default is missing two important pieces that Linux distributions generally already have: ● A good customizable terminal: https://iterm2.com/ ● A universal package manager: https://brew.sh/ Once those two things are installed, we’ll be ready to roll!
  7. 7. Modern Shells Every Unix systems comes with some close variant or unmodified version of sh (1971) or bash (1989) as a default shell. These programs are old. Various widely available shell features: ● Aliases ● Environment variables ● Shortcuts (C-[a/e/l/k], A-[f/b], up/down…) ● Piping (|, >, <, >>, &) ● Expressions (!!, -, ., .., ~)
  8. 8. Modern Shells Advantages of moving towards a more modern shell instead: ● Powerful tab completion ● Command suggestions ● Path expansion ● Git plugins ● Dynamic aliases ● Tons of customization
  9. 9. Modern Shells zsh: ● Extension of Bash from 1990 ● Follows the POSIX standard more closely than fish ● More customizable than fish fish: ● Exotic shell from 2005 ● Slightly different from the Bash syntax ● A lot more out-of-the-box than zsh
  10. 10. Terminal Multiplexer “A terminal multiplexer is a software application that can be used to multiplex several virtual consoles” - Wikipedia, useful as always Advantages of multiplexers: ● Persistence ● Multiple panes/tabs ● Session sharing ● Predefined configurations ● Input synchronization
  11. 11. Terminal Multiplexer screen: ● Initial release in 1987 ● Installed by default on most systems ● Built-in telnet client tmux: ● Initial release in 2007 ● Easier configuration and plugins
  12. 12. Personalize Your Dotfiles Dotfiles are configuration files for Unix applications (usually starting with a dot to hide the file, hence the name) stored in your home directory. Suggestions: ● Customize dotfiles for applications you spend a lot of time in (e.g. tmux) ● Store customized dotfiles in a source repository (e.g. github) ● Automate repeated processes using dotfiles, aliases, and scripts ● Pick a preferred color scheme and font, and use it consistently
  13. 13. Useful Commands In 1986, Donald Knuth (the father of algorithm analysis) was asked to write a program which could read a text, determine the n most frequently used words, and print out a sorted list of those words along with their frequencies. His solution was about 10 printed pages of Pascal long. It was well designed and used efficient data structures. In response, a reader wrote a shell script that produced the same output [...]
  14. 14. Useful Commands The script was six lines long. tr -cs A-Za-z ‘n’ | tr A-Z z-a | sort | uniq -c | sort -rn | sed {$1}q
  15. 15. Useful Commands Basic commands: ● man - display the manual for a command ● ls - list directory content (-l print details, -a print hidden, -h human units) ● cd - change current directory ● pwd - print current path ● mv - move files around ● cp - copy files around (-r recursive) ● rm - remove files (-r recursive, -f force) ● mkdir - create directories (-p also create parent directories)
  16. 16. Useful Commands Basic commands: ● which - show the path of a shell command ● date - print the system date and time ● tree - list directories and files in a tree-like format (-L level) ● ln - make links between files (-s symbolic link) ● touch - create empty files ● chmod - change the permissions of files ● chown - change the owner of files
  17. 17. Useful Commands Files and inputs: ● echo - print a line of text (-e recognize escape sequences) ● less - interactive reading of file or input ● tail - output last portion of a file or input (-f follow, -n number of lines) ● grep - print lines matching a pattern (-v invert pattern) ● find - search for files in directories (-name file pattern) ● diff - compare files line by line (-w ignore all whitespace) ● sort - sort lines of text (-f ignore case, -r reverse) ● wc - print the amount of lines, words, and bytes (-l print only line count)
  18. 18. Useful Commands System-related commands: ● uname - print system information (-a print all information) ● free - display amount of free and used memory (-h human units) ● lsblk - list the system’s block devices and partitions ● df - display file system disk space usage (-h human units) ● du - estimate file space usage (-h human units, -s summarize)
  19. 19. Useful Commands Process-related commands: ● top - process manager / viewer ● htop - better process manager / viewer ● ps aux - lists all currently running processes ● kill - kill a process based on pid (-9 force kill) ● pkill - kill a process based on name pattern (-9 force kill)
  20. 20. Useful Commands Network commands: ● ssh - ssh client ● scp - secure copy over ssh (-r recursive) ● ping - send icmp echo requests to hosts ● wget - non-interactive file downloader ● curl - transfer data to or from server (-k insecure connection)
  21. 21. Misc FAQ ● How do I change my shell permanently? ○ chsh -s <shell path> (after installing the shell) ● What if a command seems to be missing? ○ apt-get install <command> or brew install <command> (or other, depending on distro) ● How do I do the whole “git dotfiles” deal? ○ Have your customized dotfiles in a separate directory that isn’t your home (e.g. ~/dotfiles) and symlink them to where they should be. (e.g. ln -s ~/dotfiles/.vimrc ~/.vimrc) ● What font and color scheme do you use currently? ○ At the moment I’m a big fan of SF Mono with a Solarized Dark theme.
  22. 22. Closing Words Don’t be afraid of trying new techniques, languages, and tools. Text Editors: ● Vim, Emacs ● Atom ● VSCode Java IDEs: ● IntelliJ** Languages: ● Java/Kotlin ● Python ● C++ ● Golang ● Javascript Data formats: ● JSON ● YAML Technologies: ● Ansible ● Docker
  23. 23. Closing Words “I have never let schooling interfere with my education.” - Grant Allen / Mark Twain Continuous learning is already important in most areas of life, but it is almost required in software engineering to stay relevant. There are a ton of great blogs, podcasts, and books out there. Great starter Wiki about a ton of topics relating to software careers: https://www.reddit.com/r/cscareerquestions/wiki/index
  24. 24. Questions? Any other things I should cover for next time?

×