Skip to content

Latest commit

 

History

History
335 lines (226 loc) · 17.2 KB

readme.md

File metadata and controls

335 lines (226 loc) · 17.2 KB

Manual for Computer Science Students

This is my collection of awesome articles and videos related to computer science and programming -- mostly the results of spending hours and hours of reading Hacker News. It's the sort of posts that I felt lucky to have come across, but that I wouldn't expect people to be able to find if they didn't read Hacker News on that particular day it was featured.

I also tried to give a few recommendations for settings up your system (but your mileage may vary); for example, it took me years before I realized you could use anything but bash as your shell.

But first, here is a small bit of advice:

From now on you will spend a lot of time in front of your computer -- better make the most of it, better learn the tools properly!

From my own experience, learning to use the tools for software development properly was not part of the curriculum. Everyone sorts of just expects you to learn on your own. This will require extra work (besides following lectures and solving assignments), but in my opinion it really pays off.

In general, you won't do well in programming or academia just by being smart, but by working hard.


Articles I would encourage reading

Stories

It's always good to know a bit of background information. Here are some stories I enjoyed myself:

Funny stories about bugs:

Funny joke-articles:


General programming culture


Misc / Good things to know


First minutes on a server


Job search

I interviewed at six top companies in Silicon Valley in six days, and stumbled into six job offers explains how to practise for job interviews at companies like Google (I skipped the parts about iOS apps). Most of it boils down to practising, specifically it was recommended to look at Top Interview Questions from LeetCode.

I think these 12 questions from the "Joel Test" forms a good baseline to spot companies that could be terrible.

More Interviewing Tips

Negotiation

Equity and Stcok Options

Startups


Programming Exercises


Language Specific

Always use the most powerful language! Why? Because you want to be Beating the Averages

Lisp

"Most people who graduate with CS degrees don’t understand the significance of Lisp. Lisp is the most important idea in computer science." -- Alan Kay. So go read The Idea of Lisp

Java

Why do people not like this? I found a nice Quora question talking about this. I think this answer makes a pretty good explanation. also see this peice on "Java Shop Politics" -- for the ones feeling like reading a rant about java, see this

PHP

We all like to laugh at PHP .. this is one of the reasons: md5('240610708') == md5('QNKCDZO')

Also see this comic The right tool for the right job

Haskell

A list of stuff it's nice to know when getting started http://dev.stephendiehl.com/hask/

Prolog

A StrangeLoop talk about using prolog in production https://www.youtube.com/watch?v=G_eYTctGZw8

Idris

An introduction to how a dependently typed functional language works https://www.youtube.com/watch?v=4i7KrG1Afbk

SQL

Don't do this from PostgreSQL, that has a nice set of gotchas (like not using BETWEEN with timestamps).


Report writing

Please, watch "How to Write a Great Research Paper" by Simon Peyton Jones

If you're at DIKU and have to write a synopsis with learning objectives, I found help in this guide and this one from DTU


Security

How to handle passwords (2015)

If you're want to earn a bit of cash after finding a bug, see HackerOne

Scary story: Data from connected CloudPets teddy bears leaked and ransomed, exposing kids' voice messages


GDPR


Tips and Tricks for setting up your system

Can recommend looking through The Book of Secret Knowledge which lists a ton of tools to use to do useful things on your system.

Shell

When you're going to live on the commandline, you can just as well make it comfortable -- use a decent shell. Most distributions will use bash as the default, and while it gets the job done, much can be improved.

I would recommend either using

  • zsh, bash with superpowers -- customization Oh My Zsh
  • fish, a modern rethinking of how to do things -- customization Oh My Fish

Excellet overview of syntax in different shells

Guide filled with all sort of tricks and tools: The Art of Command Line


Git

Do yourself a favour, and learn to use git properly. You know how using a real editor was an improvement from using notepad? The same kinda goes for dropbox vs. real version control.

But everything about git and other DVC (Distributed Version Control) systems is not just nice. see this article which points out mistakes: http://bitquabit.com/post/unorthodocs-abandon-your-dvcs-and-return-to-sanity/

http://endoflineblog.com/gitflow-considered-harmful

I can dearly recommend this post about writing commit messages A Note About Git Commit Messages (by Tim Pope) -- and if you want a bit more context, How to Write a Git Commit Message and 5 Useful Tips For A Better Commit Message


SSH

  • Learn to write config file (TODO: sample URL)
  • Use ControlMaster and ControlPersist (log in once, avoid setup cost rest of the day) link.

Window manager

Try a tiling window manager. And stick to it for a bit. I'm sure you will like it.

  • i3 -- easy to get started with.
  • xmonad -- requires some configuration.

Emacs

http://www.masteringemacs.org/reading-guide


PDF-viwer

zathura is really nice


LaTeX

See /grammar for some scripts to help with your writing.

When you want to compile, use latexmk -pdf -pvc <main-file.tex>. This will run the correct commands (such as pdflatex, biblatex, biber) the correct number of times (usually pdflatex; biber/biblatex; pdflatex; pdflatex), whenever one of the files used is updated (also by using \include{<file>})

Use https://en.wikibooks.org/wiki/LaTeX -- it is pretty good at covering what to do.

For math questions, also check out http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference and http://joshua.smcvt.edu/undergradmath/undergradmath.pdf

For presenting, check out this program Beam

And here is a list of packages I found useful:

  • afterpage: If you want your figure to be no longer away than next page, place your figure, and use \afterpage{\clearpage}.

  • pgfplots: Allows you to make nice plots from datafiles. I have nice configurations, I should share them.

  • TikZ: to draw things in latex.

  • todonotes: Places highly visible notes, so you can remember to fix things. I usually add a fixme command adding this to me preamble \newcommand{\fixme}[1]{\todo[color=red,]{#1}}

  • mathtools: Use this isntead of amsmath. Lets you define. Make \ceil{...} work, can also do \ceil[\Big]{...}

\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
\DeclarePairedDelimiter{\floor}{\lfloor}{\rfloor}
  • semantic: Nice features for writing semantic rules. Has cool feature to write shorthand things, for example to make the text |-> in math mode become a TODO: INSERT SOMETHIGN HERE, use \mathlig{|->}{\mapsto}.

  • microtype: Should greatly improve general look of the text.

  • subcaption: for subfigures

  • algorithmicx: for pseudo-code. To use properly, include \usepackage{algorithm} and \usepackage{algpseudocode} in preamble.

  • siunitx: nice way to enter units. EXAMPLE?

  • nth: \nth{1} will give you 1st. I like to use it with the super option.

  • hyperref: make references, citations, and URLs clickable.

I can also recommend http://colorbrewer2.org/ for determining color schemes for figures and such.


Random things that seemed interesting