Hacker News Comments on
Hacker News Stories and CommentsAll the comments and stories posted to Hacker News that reference this url.
There is a "Building a Web Browser" course on udacity. Maybe someone who has taken the course comment on it.
If you want to improve at programming: follow the advice about either making a personal project or working on an open source project. The fastest way to get better at programming is to program more.
However: it sounds like your interests are actually more in the realm of Computer Science than Programming, though: type theory, theory of computation, compilers, AI, etc. are less in the realm of programming and much more in the realm of computer science. You don't really need to know how an NFA or DFA works in most day to day programming, frankly. For learning Computer Science, I would suggest finding an advanced course with all of its material online (MIT OpenCourseware is a good place to start, or any of the other free online courses places), and working through a course on the topic. If it has prerequisites that you don't know any/most of the material from, then find a course on those. In my opinion, the other common options (reading through a textbook, reading papers, working on a project related and just learning what you need for that) all have flaws: textbooks are usually designed to accompany a course, which means they usually have much more than you need to learn a lot about the subject (and, in my experience, many are unbelievably boring and poorly written; if you want to go that route, make sure you find ones that are appropriate for self study). Reading papers is really interesting (and a lot more fun than reading textbooks), but without context or knowledge about the area, it's hard to evaluate the paper's meaningfulness/claims/etc., and hard to decide which papers are important to read. Working on just a project (e.x. just writing a compiler) leads to learning just enough to make that project, and not more. If you want to improve at programming: follow the advice about either making a personal project or working on an open source project. The fastest way to get better at programming is to program more.
Frankly: it sounds like you are decidedly not as much of an 'expert beginner' as you think you are. Familiarity with basic data structures+complexity, an understanding of theory, and an understanding of math through linear, ODEs, and discrete already puts you on a very firm grounding. (Outside of certain very specific parts of CS, you /do not/ need more math than that. If you're going into graphics research, knowing differential topology+geometry might be handy. I'm having a hard time thinking of things other than that, though.) From your description, you have more or less finished the 'beginner' stage, moved well beyond the 'novice' stage, and are moving towards becoming someone with a lot of advanced knowledge. Just knowing that you're interested in things like type theory+compilers/machine learning+expert systems+AI already puts you /way/ beyond being a beginner.
Shameless plug of someone else's stuff: if you're not sure where to start on the courses front, and want to start on the programming languages side of things (compilers, etc.), this course might be a good place to start: https://www.udacity.com/course/cs262 I haven't worked through this course in particular, and I don't know its exact difficulty, but I took undergraduate programming languages from this professor and he's an /amazing/ teacher.
Edit: don't know why I had two copies of that written, but now there should only be one. Also, cryptography is another part of CS that you need more math (in this case, abstract algebra). (More multiple copies? I seem to be pretty bad at this "say things once" thing, and need to make some preference changes.)
⬐ eshyongJust an addition to your course suggestion: Coursera has a compilers course too, taught by a Stanford professor! I'm working through it right now. The lectures are informative and the assignments have you build a working version of a COOL (professor's own language) to MIPS assembly compiler. It's been very enlightening so far!⬐ lettergramWow, awesome response.⬐ None⬐ NoneNone⬐ electronvoltI recently finished up my undergraduate education and realized there were certain large important parts of computer science I knew very little to nothing about (I stopped really taking CS classes to go take a lot of advanced math courses my last two years, which I'm not certain was the best decision, but it wasn't a bad one either), so I've been thinking a lot in the past few months about what my best options were for learning about subjects I'm weak in or knew next to nothing about. (E.x.: implementation of databases, OS design, AI, HCI, and other fields) Putting that into words wasn't too difficult, and hopefully it'll make figuring things out easier for someone else... I tried the reading papers and textbook approach, which is part of why I wouldn't recommend them.⬐ collyw>I recently finished up my undergraduate education and realized there were certain large important parts of computer science I knew very little to nothing about
Get used to it, the field is huge. You will only every have a surface level overview of "everything".None
Hmm, I started programming around 1991, but didn't take it seriously until around 1997.
I haven't gone through this class, but it appears to cover the basics of programming language topics: https://www.udacity.com/course/cs262
And I like this book: http://mitpress.mit.edu/books/essentials-programming-languag...
You can get much, much deeper into this topic, but skimming the surface a bit was really all I was suggesting, unless you have interest in programming language design in particular.
⬐ test001onlyThanks for the links. Is "Structure and Interpretation of Computer Programs" from MIT press similar to essentials programming language?⬐ tjrThere is some overlap. EOPL naturally focuses on, and goes deeper into, programming language design topics, but SICP covers it some as well. Chapter 4, especially:
"I worry that it could be a waste of time"
It's education. If you want to stay 20 years in this industry, you have to invest in your education. Don't worry, just do it. Solving the problems would make you a better problem solver.
"I feel that most prospective employers don't really care about that, though."
That's right. Most prospective employers don't care. Don't work for them. If you have to, read my last answer.
"In otherwords, is SICP worthy of a CV bullet point."
Yes, really good developers would appreciate the effort. Employers won't care but the senior developer taking your technical interview may appreciate it.
"I should be focusing on more practical projects before looking for a first job." Yes, you must do that. Nothing beats showing a perfectly operational website. And depending on the profile you are targeting it can be a Android game or Web game or scraper or anything. Don't worry your github profile yet. Once you start building stuff it will come alive.
You can also check out https://www.udacity.com/ for some practical courses. They are taught by awesome people and are free. All these courses focus on a project to teach you basics of computer science. And you get real world skills.
1. Building a Search Engine - Introduction to Computer Science - https://www.udacity.com/course/cs101
2. Building a HTML5 game - HTML5 Game Development - https://www.udacity.com/course/cs255
3. Building a Blog - Web Development - https://www.udacity.com/course/cs253
4. Building a Browser - Programming Languages - https://www.udacity.com/course/cs262
5. Building blocks of any non - trivial software project - Design of Computer Programs - https://www.udacity.com/course/cs212 .
All the best learning CS, building things and contributing to the world.