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.
It's always good to know a bit of background information. Here are some stories I enjoyed myself:
- The origin of the terms loop, patch, and bug
- History and war between OpenGL and Direct3D
- AMD vs. Intel
- History on spam war from GMail engineer
- How Diablo II was made
- The story behind the "Diablo: Hellfire" expansion
- I Sell Onions on the Internet -- a story about randomly finding something meaningful to do on the internet. It's hard to explain, so just trust in the 3K+ votes it got on HN ;)
- Who controls glibc? (Stallman trying to overrule)
Funny stories about bugs:
- Can't email more than 500 miles away
- OpenOffice will never print on Tuesdays!?!
- Car allergic to vanilla ice cream
- $400 Million lost in 45 Minutes
- 65535 interfaces in C# ought to be enough for anybody
- The curious case of the Raspberry Pi in the network closet
Funny joke-articles:
- A Brief, Incomplete, and Mostly Wrong History of Programming Languages
- The truth about C & Unix history
- Why Google Needed a Graph Serving System: A story about building the right technical solution for Google's Knowledge Graph (used to show facts on the right hand side of google searches), and how it ended up not being used for non-technical reasons
- Programming Sucks "Mordor sucks, and it's certainly more physically taxing to dig a tunnel than poke at a keyboard unless you're an ant. But, for the sake of the argument, can we agree that stress and insanity are bad things? Awesome. Welcome to programming."
- What I’ve learned so far about software development General advice about how development should work.
- Keep It Simple Stupid (KISS) and You Aint Gonna Need It -- FizzBuzz in too much detail
- General rules
- What are the best-kept secrets of great programmers?
- 9 Anti-Patterns Every Programmer Should Be Aware Of
- Googles guide til at være en god studerende
- Writing clean code -- it's not easy, and requires "good taste"---
- The Sliding Scale of Giving a Fuck
- Talks that changed the way I think about programming
- The Best Programming Advice I Ever Got
- Latency numbers every pogrammer should know
- What every programmer should know about memory
- Computer Scientist's Trivia
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
- How UTF8 actually works (8 min video)
- H.264 is Magic
- How Not To Sort By Average Rating
- UTC is enough for everyone right? -- a talk about how handling dates and time is horrible
- These days, lots of that stuff is available as SaaS. What are the tools and services people use instead of hosting their own? Hacker News Tools of the Trade answers that
- https://plusbryan.com/my-first-5-minutes-on-a-server-or-essential-security-for-linux-servers
- http://www.codelitt.com/blog/my-first-10-minutes-on-a-server-primer-for-securing-ubuntu/
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.
- Ten Rules for Negotiating a Job Offer (Part 1)
- How Not to Bomb Your Offer Negotiation (Part 2)
- How I negotiated a $300,000 job offer in Silicon Valley (by the same person who got 6 offers)
- Salary Negotiation: Make More Money, Be More Valued
- An Engineer’s guide to Stock Options
- What I Wish I'd Known About Equity Before Joining A Unicorn
- TLDR; Stock options -- a simple tool to help you fiugre out how much those options are worth.
- https://projecteuler.net/
- https://leetcode.com/
- https://www.hackerrank.com/
- Problem sets as known from programming contests http://codeforces.com/
- 99 Haskell Problems
Always use the most powerful language! Why? Because you want to be Beating the Averages
"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
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
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
A list of stuff it's nice to know when getting started http://dev.stephendiehl.com/hask/
A StrangeLoop talk about using prolog in production https://www.youtube.com/watch?v=G_eYTctGZw8
An introduction to how a dependently typed functional language works https://www.youtube.com/watch?v=4i7KrG1Afbk
Don't do this from PostgreSQL, that has a nice set of gotchas (like not using BETWEEN
with timestamps).
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
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 – A PRACTICAL GUIDE FOR DEVELOPERS
- How To Protect Your Users With The Privacy By Design Framework
- How GDPR Will Change The Way You Develop
Can recommend looking through The Book of Secret Knowledge which lists a ton of tools to use to do useful things on your system.
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 Zshfish
, 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
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
- Learn to write config file (TODO: sample URL)
- Use ControlMaster and ControlPersist (log in once, avoid setup cost rest of the day) link.
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.
http://www.masteringemacs.org/reading-guide
zathura is really nice
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 afixme
command adding this to me preamble\newcommand{\fixme}[1]{\todo[color=red,]{#1}}
-
mathtools
: Use this isntead ofamsmath
. 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 thesuper
option. -
hyperref: make references, citations, and URLs clickable.
I can also recommend http://colorbrewer2.org/ for determining color schemes for figures and such.
- A book about the linux kernel and its insides linux-insides
- EFF guide to Safer Online Communications
- https://triplebyte.com/blog/how-to-interview-engineers
- StackExchange is a nice site, ask good questions, and provide good answers. But be careful that you don't end up using all of your day writing TikZ code for drawing coffee cups