πŸ‘€rspivakπŸ•‘7yπŸ”Ό334πŸ—¨οΈ81

(Replying to PARENT post)

I don’t really like the recommendation for SICP. The book expects a certain level of mathematical maturity from the reader and I think this level is significantly greater than the level that might be expected from the targets of this website. Mathematical maturity in this case can be broken into two parts:

1. Understanding what a proof is, what is required to prove some proposition, how to figure out and write a proof, how to cope with struggling to prove something, and how to carefully read definitions.

2. Just knowing what β€œbasic” things are. In the case of SICP these include calculus in one variable, lots of elementary algebra, an understanding of polynomials and exponentials, vectors and linear transformations (roughly the level of geometry required for basic classical mechanics (c.f. SICM although this is a slightly more advanced way of doing mechanics))

It is easy to see this requirement by looking at the exercises from the book. They start with calculus themed exercises (e.g. Newton’s method), move on towards more algebra flavoured problems and then vectors/geometry. Later exercises are not on mathematics but require one to apply a reasonable amount of mathematical sophistication to get the answer. Throughout are exercises which rely on the reader carefully applying their careful reading of carefully written definitions for things like models of evaluation.

I have another issue which is with the following:

CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage.

I basically disagree with this entirely. I would say that computer science is basically a branch of pure mathematics with applications to engineering practice with real-life computers. I’m not sure I would describe it as runaway but some branches of computer science (eg operating systems) are, I think, not really branches of mathematics.

πŸ‘€dan-robertsonπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

My theoretical knowledge of computer science can be approximated to zero, as is my knowledge of math, but for some time I worked as a programmer with good results; in my best days I could write about two hundred lines of C or Pascal in a few hours, then go home without testing them because the machine wasn't available and be complimented the following day because they compiled and worked without any errors. I still felt I was lacking something so I tried to improve reading some books but all of them required high math skills I never had, so I quickly gave up. (Niklaus Wirth algorithms book probably is the only exception here) I can perfectly figure in my head registers loading data and shifting them around, logic gates changing and combining values, stacks pushing and popping words, electrons flowing through components etc, and for example can diagnose problems in analog circuits due to say bad decoupling, ground loops etc. Figuring them is easy from experience but the math behind that is way harder; anything beyond simple equations is like alien language to me, and the very few times I grasped something beyond that I quickly forgot for lack of continuous exercise. Did anyone else encounter the same discouraging level of difficulty? So my question would rather be: are there any good algorithms book for nearly complete math illiterates like me that would help to learn both in the process (and possibly not hate them :)?
πŸ‘€squarefootπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

I have many degrees in computer science, and have used almost none of the knowledge in programming jobs. So, the content is fairly useless, practically speaking. I've also found the more I focus on theoretical elements while at work, the more useless I become. The actually useful elements are big picture, and can probably be taught in one or two classes. Much more useful than technical knowledge are the abilities to reason about systems and solve problems. In my opinion, the CS classes seem to be almost purposefully obtuse.
πŸ‘€ytersπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

This seems like a thought out list of recommendations. I have enjoyed going through some of those books myself. However, the persuasive argument seems rather biased and somewhat toxic. There are many software developers out there, without a strong CS background, who write useful tools used by other developers. Does anybody here use Homebrew? The author admits that Homebrew is not the perfect software, but I think we can all agree that it's highly successful and helps many developers every day.

The field of computer science can be rather punishing if you don't grow up with a STEM mentality. I don't think there's a need to put any more pressure on developers and tell them they are not on a path to make enough money, that they will not work on interesting problems and that they have to spend another 900 to 1800 hours before they are worthy.

We should instead foster a mentality of inclusion and promote learning by getting people excited about spending 100 hours on a particular subject and not persuade people to learn based on the fear of missing out. And we're not addressing the really big elephant in the room. So many bright people spend 900 to 1800 hours developing their CS skills and end up working on trivial things that could just as easily be tackled by somebody with a bootcamp background.

https://www.quora.com/Whats-the-logic-behind-Google-rejectin...

πŸ‘€mlpinitπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

There aren't two types of software engineers. It's a spectrum, possibly multidimensional. The attraction to declaring two types of any kind of person is that you can bin all the desirable and undesirable traits together.
πŸ‘€WaterluvianπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

My personal experience is that I got bored with frontend and pushing pixels, and when I tried to switch into infra work I found my incomplete picture of CS made it hard for me to grasp concepts other seem to take for granted. Maybe you don't have to have a CS degree, but even having a survey knowledge of major CS topics will at least give you more confidence.
πŸ‘€bogardonπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

previous discussion, 237 comments:

https://news.ycombinator.com/item?id=13862284

πŸ‘€lainonπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

Of course if you read every available online course, buy books, you can teach yourself CS.

I'm always more interested in reading quality material, that teaches things quickly and efficiently, with practice and not just long theory, without going into dark details. Those material are more rare. It's also often more interesting to learn about subjects you're interested into, instead of just "learning CS".

I have an allergy to academic materials, and reading books that teach theory without explaining their application. Math is important, but it's a mean to an end, and to me it's better to teach CS with code. You cannot teach the proper math to everybody. The finality of computers is to use them by writing code and algorithms that perform well or better. Analyzing computability and other theory seems like applied math, so it's not really applied to computers science in my mind.

Being able to pick up machine learning is great, but there won't be many individuals using that sweet math to do CS research. I used to believe programming was always a field of research in a way. It's not. You don't see random developers building ground breaking algorithms that change the world. That doesn't happen. Programming is about engineering and tinkering. You don't need to teach yourself computer science, you need to teach yourself more math, or learn programming, or learn electronics.

πŸ‘€jokoonπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

I didn't really get algorithm analysis, beyond the standard sequential analysis of this simple operation maps to X complexity, until I did some complexity theory then it all sort of came together https://functionalcs.github.io/curriculum/#sec-12-1
πŸ‘€hackermailmanπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

Does this even matter given that Apple is developing a new screen technology?

https://www.bloomberg.com/news/articles/2018-03-19/apple-is-...

πŸ‘€noetic_techyπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

I think the problem with Computer Science is that the focus has been on the C and C++ programming languages.

It goes back to the 1970s. C was created to have all these cute little tricks that you could do to manipulate your data in memory. This led to pointers and all the fancy pointer arithmetics, that allowed your program to run a few clock cycles more efficiently. But, the cost is that you shoot yourself in the foot, once in a while.

Fast forward to now, and squeezing a few extra clock cycles here and there, and memory usage conservancy is largely irrelevant, except for a few edge cases.

C is just a bad programming language. And C++ just inherited all its defects, just to bring in Objects. But the objects were a poorly designed idea, and was terribly executed.

In C and C++, instead of just focusing on your problem, you have to manage the language, and its built in defects.

Then came Java. And it was the opposite reaction to C++. No more pointer arithmetics, everything is now a reference. Ok, good. But, it created another problem. The framework monstrosity. Learning the language itself is simple enough. But having to work with someone else's poorly designed framework, that makes no logical sense, is just unbearable. In Java, you now have to manage the framework.

I like Python for its brevity and conciseness. And especially for its flexibility with functions. It allows you to program in a pure functional style. It's a breath of fresh air. I can build out my code like lego blocks, stress test each function, and then connect it all together. And the results work flawlessly. Except for one catch, it runs a little slower.

I'm hoping this move into Functional Programming will be the next true wave to come into the computer industry.

πŸ‘€blackrockπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

πŸ‘€_t94rπŸ•‘7yπŸ”Ό0πŸ—¨οΈ0

(Replying to PARENT post)

I think adding a concrete language (most probably C) and a course for OOP to the list might prove useful.
πŸ‘€l39πŸ•‘7yπŸ”Ό0πŸ—¨οΈ0