Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This is interesting. If I were to complement the list, these are some items I’d add that helped me:

- learn functional programming. Doing that was how I finally “grokked” programming and could solve problems more easily. Before I was ready to give up.

- learn CS history. I studied UX and what I learnt was mostly one side of how to think about computing where you spoon feed users and remove things. There are other ways to conceptualize software and design, which would have left me less disillusioned.

- learn fundamentals: data structures, networking, performance, operating systems, security, unix, math. These are so neglected in the industry, and we’re left with super complex systems we don’t actually understand as a result.



"learn fundamentals: data structures, networking, performance, operating systems, security, unix, math. These are so neglected in the industry, and we’re left with super complex systems we don’t actually understand as a result."

I sometimes hold a "command line fundamentals" course for my teams. Just being able to understand the basics puts them above any team that doesn't.

You have to know the ground you're building on. Otherwise even your foundation will be faulty.


> You have to know the ground you're building on. Otherwise even your foundation will be faulty

Exactly, well put. Knowing the fundamentals leads to a more solid, safer foundation as you understand better what you can do with what you have and avoid layers of abstraction.


Could you please share an itinerary for this? I’d also like to hold a similar course but don’t know where to start.


Sure thing! This assumes everyone has macOS, but isn't very mac-specific.

  * Introduction
    Quick history of Unix

  * When you log in
    Difference between login and interactive shells
    System shell files vs user shell files
    .zshenv for environment variables like PATH, EDITOR, and PAGER
    .zprofile for login shells, we don't use it
    .zshrc for interactive shells
    Your login files are scripts, and can have anything in them

  * Moving Around

  ** Where am I?
    pwd = "print working directory"
    stored in variable $PWD
    Confusingly, also called current working directory, so you may see CWD or cwd mentioned

  ** What is here?
    ls
    ls -al
    ls -alt
    . prefix to filenames makes them hidden
    . is also the current directory!
    .. means the parent directory

  ** Finding my way around
    cd
    cd -
    dirs | sed -e $'s/ /\\\n/g'

  ** Getting Help From The Man
    man 1 zshbuiltins
    manpage sections

  ** PATH
    echo $PATH | sed -e $'s/:/\\\n/g'
    zshenv PATH setting

  ** Environment Variables
    env | sort
    EDITOR variable

  ** History
    ctrl-r vs up arrow

  ** Permissions
    Making something executable

  ** Prompts
    zsh promptinit
    zsh prompt -l

  ** Pipes
    Iterate to show how pipes work
    cat ~/.zshrc | grep PATH

  ** Commands

  *** BSD vs GNU commands
    BSD are supplied by Apple, and Apple often uses old versions
    GNU are installed via homebrew, and match those commands available in Linux




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: