
Ask HN: Help a self taught programmer wannabe what to do next - lucasrp
Hi everybody!
I work as a product manager, and decided that the best thing for me to learn is to code, so i can understand what the devs are talking, and can weight tradeoffs better, without bothering them with simple things.<p>I think that MOOCS are one of the best things that happened in internet in last few years, and i became a avid consumer of them. I did introductory courses (Harvards CS50 and MIT 6.00x). Did Andrew&#x27;s Ng machine learning course, and i&#x27;m finishing Programming Languages by Dan Grossman. Besides the theory, i&#x27;m working on a few pet projects envolving machine learning. Learned git basics, and read the news reguarly on Hacker News.<p>I have major holes in my lnowledge that i would like to fulfill now. Programing per se, and algorithms don&#x27;t afraid me ( i think i learned it fast because a i have a very good foundation on math (enough to understand machine learning theory, for example).<p>The thing is, i know nothing about:<p>i) Infrastructure: How to deploy, how to monitor, how to use linux well ii) Networking and asynchronous programming: My programs are always linear and take inputs from files.<p>Without learning (i) and (ii), it&#x27;s impossible to envolve my pet projects into something really usable.<p>I want to learn how programs talk with each other, how they are deployed, event loops, how machines are provisioned, and stuff.<p>Any sugestions? I&#x27;m not afraid learning &quot;the hard way&quot;, but i would really appreciate it something like moocs, with baby steps and immediate feedback of the progress.
======
angersock
Some helpful starting points:

Learn about the Unix Way:
[http://c2.com/cgi/wiki?UnixWay](http://c2.com/cgi/wiki?UnixWay)

Learn about crufty neckbeard stuff:
[http://doc.cat-v.org/programming/](http://doc.cat-v.org/programming/)

(cat-v has all kinds of interesting things)

Learn C:
[http://c.learncodethehardway.org/book/](http://c.learncodethehardway.org/book/)

No, really, learn C: [http://www.amazon.com/C-Programming-Language-2nd-
Edition/dp/...](http://www.amazon.com/C-Programming-Language-2nd-
Edition/dp/0131103628)

Learn about networking with sockets:
[http://www.beej.us/guide/bgnet/](http://www.beej.us/guide/bgnet/)

(it's in C, but the principles are in other language bindings as well)

Devops/sysadminning is mostly just damned superstition and voodoo and hard-
fought experience...that said, consult notes from others:
[http://users.cis.fiu.edu/~tho01/psg/](http://users.cis.fiu.edu/~tho01/psg/)

~

If you want more hands-on experience, setup a VPS and make something:
[http://feross.org/how-to-setup-your-linode/](http://feross.org/how-to-setup-
your-linode/)

If you find stuff in there you don't understand, ask your devs for help.

------
mcintyre1994
I'm a second year Computer Science student now, so hopefully I can give you a
few ideas.

Along with Intro to CS, maths for CS is pretty important. You said you have a
strong math knowledge - probably stronger than mine, so I'll just point out
that you want discrete maths. If you're comfortable with discrete structures -
sets, trees, graphs, logic, recursions, not to worry. This course looks pretty
solid if you want a look,
[http://www.saylor.org/courses/CS202/](http://www.saylor.org/courses/CS202/)

You said algorithms don't worry you, but how much work have you done there?
You want to know data structures - and methods for designing algorithms. Take
a look here,
[https://class.coursera.org/algo-004/lecture/index](https://class.coursera.org/algo-004/lecture/index)
and here,
[https://class.coursera.org/algo2-002/lecture/index](https://class.coursera.org/algo2-002/lecture/index),
to see how comfortable you are with that content.

After that, I can't say I'm an expert in Linux. Maybe it would be a good idea
to take a course in computer architecture - you get a much better
understanding of what's really going on. I haven't taken either, but you could
consider [http://www.coursebuffet.com/course/87/260-Computer-
Architect...](http://www.coursebuffet.com/course/87/260-Computer-Architecture)
or [http://www.coursebuffet.com/course/289/260-Computer-
Architec...](http://www.coursebuffet.com/course/289/260-Computer-
Architecture).

If you want theory on computer networks, this course looks good
[https://www.coursera.org/course/comnetworks](https://www.coursera.org/course/comnetworks).

More practically, it really depends what you're doing. An OS course will
probably introduce you to sockets and networking in C, but you're probably not
using C - it's probably a matter of learning some APIs for whatever you're
writing in.

Also if you're deploying web services, Coursera have a startup engineering
course,
[https://www.coursera.org/course/startup](https://www.coursera.org/course/startup),
some of that could be helpful? It looks like they use Amazon Web Services for
deployment though, so if it's something you want to learn yourself I'm not too
sure sorry.

Sorry that's a bit long winded, if you have any questions feel free to ask :)

------
Skoofoo
For how to use Linux well, it helps to become very familiar with the UNIX
shell. I recommend reading The Linux Command Line* for this.

* [http://linuxcommand.org/tlcl.php](http://linuxcommand.org/tlcl.php)

