Hacker Newsnew | past | comments | ask | show | jobs | submit | curious16's commentslogin

Learn to Program: Crafting Quality Code

https://www.coursera.org/learn/program-code


If you really care about learning, carve out time from your daily routine and progress little by little in chunks.


Wow! I didn't know that Shriram's introductory course had lecture videos available. I will take a look at them.

Btw, I also liked Hubbard and Hubbard.

Another book I liked was Computer Systems: A Programmer's Perspective at https://csapp.cs.cmu.edu/


Check out Fast.ai's two part course.


What language do you work in now? If it is an imperative language do you avoid state as much as possible?


Mostly Python. I do try to avoid mutable state as much as possible, and generally keep things functional (in the sense of functions used for the return values, not their effects). When there is mutable state, keep it as local as possible (within functions or classes).


And how does one learn reasoning skills?


"My gut feeling says that students never learned strong reasoning skills and mathematical induction."

This quote from the linked article resonates with me quite a lot. I see people trying to understand recursion in code and not getting the hang of it.

CMU is one university where it's CS curriculum teaches functional programming after a rigorous course on Pure Mathematics Intro - https://www.math.cmu.edu/~jmackey/151_128/welcome.html. The functional programming course (15-150) materials are not public, but they use SML and uses heavy use of induction proofs and recursive implementations.

The other line of programming pedagogy argues that only simple high school algebra is enough to teach programming via recursion. I am talking about How to Design Programs: https://htdp.org/ and now the DCIC book: https://dcic-world.org/. They argue that looking at the data and its inherent structure is enough.

The above two approaches are mostly polar opposites of each other. I want to know what other HNers think about this.


Not a book. But a course by Prof Keith Devlin on Coursera called Introduction to Mathematical Thinking.


I jumped into the first analysis class (using baby Rudin) completely unprepared and this course saved me!


There is a 3 part course on Coursera by U of Washington Prof Dan Grossman called

Programming Languages A: https://in.coursera.org/learn/programming-languages

Programming Languages B: https://www.coursera.org/learn/programming-languages-part-b

Programming Languages C: https://in.coursera.org/learn/programming-languages-part-c

It will surely make you a great programmer if you haven't dabbled with functional languages before. Even if you have, it still makes a great course only for the teaching style of Dan.


Programming -

Stick to a specific set of tools YOU are comfortable with. Don't go with the newest fad. What matters are your skills and concepts. Not what tool you use. A skilled craftsman can use very basic tools to build impeccable creations while a naive one with the latest fancy tools can create junk. So don't jump editors, just learn the one you are comfortable with and do is in much depth.

Math -

Don't look for the golden trick. Just solve more and more problems and you will eventually get good at recognizing patterns.


The programming advice is good for productivity, but learning new things is fun too, and sometimes it becomes the best option afterwards. To add (personally), don't use new fads in a production setting or when productivity is critical, but if it's for fun or exploration, I think it's all good.

I use vim (mediocre with) for my side projects, but VS Code (proficient with) at work, for example.


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

Search: