lainchan / λ
(untitled)
DEBUG-CONTENTS · 2017-08-11 07:03
So i'm about to start a CS degree.
Could you guys pleas recommend me the best books and the best lectures(youtube/edx/etc)?
Most people recommend the Corme Algorithms books, but idk if this book is the best to start.
I'm already do some scripts and I've solved some problem on Project Euler using Python.
Demeere · 2017-08-11 08:30
>>2860
> So i'm about to start a CS degree.
save your money, kiddo.
instead, move to the country and raise alpacas.
you'll be far happier.
Church · 2017-08-11 09:30
Do you have something specific in mind or just CS in general?
You can't go wrong with SICP, so if you don't have any specific goals it's a great book to kick start your education.
setq · 2017-08-11 14:18
If you want the whole package (friends, job recommendations, social interaction) college is a good idea, but if you just want education, college usually is worse than free education. Takes far more time, too.
As for recommendations, open source society is a complete CS degree from free online courses, some of them aren't quite as good as others, but overall it's better than most colleges https://github.com/open-source-society/computer-science
I can't think of any beginner book. SICP is a great book and designed for beginners, but it's also designed for the classroom, i don't think a genuine beginner can use it by himself without tons os frustration.
CS50(course linked above) is a great place to start, if you need a reference book for C, use "C primer plus", not to confuse it with "C++ Primer plus".
Also one piece of advice, most CS material is soykaf, most books are soykaf, most teachers are soykaf, most online courses are soykaf and most blog posts are completely, full of a steaming, self promoting pile of soykaf. Not because the people behind them don't have the knowledge, but because it's difficult to convey that knowledge in an elegant way. Or they want to promote themselves instead of teaching anything.
If you're reading a CS book, read a few chapters before commiting to the whole installation and exercises process, you might come to the conclusion that the book is soykaf and you don't want to go through it all. The same for courses and even teachers, if a teacher in college is soykaf, find another source to study from. The main advice to take from it is that a lot of the material will be horrible, either because it's not well made, or because you're not yet fit to consume that material (you don't have some knowledge that the author expects you to have).
Also, almost every book will write in their introduction that it's ok for beginners to use, that's just to sell books, don't rely on that. Always pirate stuff before buying, most of them will be soykaf.
Unidentified · 2017-08-11 15:36
>>2860
I recommend this to all computer science students. I learned a lot. If you've already taken a basic data structures class you can skip to AVL trees, about video 12.
https://www.youtube.com/playlist?list=PLBF3763AF2E1C572F
Jean Dupont · 2017-08-11 17:42
>>2868
>SICP is a great book and designed for beginners,
SICP is designed for 1980s Math majors who have never touched a computer before. MIT doesn't even teach it anymore, it's nothing but a meme at this point. In 2017 I wouldn't recommend it to anyone to be honest.
>If you want the whole package (friends, job recommendations, social interaction) college is a good idea, but if you just want education, college usually is worse than free education.
I agree with this though.
JARGON · 2017-08-11 18:00
>>2871
Why not? Have you read it? I don't think there's anything outdated in it, it teaches concepts that are pretty universal, the text is well written and the exercises are still the best I've ever seen in any programming textbook. Until there's some great paradigm shift in computer architecture that will fundamentally change computing, I will keep strongly recommending it.
John Rain · 2017-08-11 19:05
>>2868
>but if you just want education, college usually is worse than free education.
to a point. Higher-level stuff is hard to learn without a really good teacher who you can ask questions to.
cdr · 2017-08-11 20:13
>>2872
I've read most of it. But only after graduating and working in industry for several years. As a beginner it didn't help me at all because it explains everything in terms of math, which only made sense 30 years ago when students could conceivable get to their late teens without seeing a computer.
>I don't think there's anything outdated in it,
Nothing except the entire concept the book is based on.
http://lambda-the-ultimate.org/node/5335
>Until there's some great paradigm shift in computer architecture that will fundamentally change computing,
I think you have that backwards. In the 1980s MIT has physical Lisp machines so using Scheme made a lot of sense. That war is over though, Intel and ARM won their processors have pushed functional programming languages into second class citizens.
>I will keep strongly recommending it.
I'm just defending my position. You are free to do what you like.
Anamika · 2017-08-11 21:57
>>2875
In most college institutions, you won't find a really good teacher whom you can ask questions to.
Joey · 2017-08-12 09:06
>>2877
I've read it as a beginner and it was incredibly helpful, I've learned tons from it. If you give up on the first chapter because you are afraid of high school maths you have bigger problems than choosing the wrong textbook. I was never very good with maths but you barely need any for SICP.
> programming by poking
That might be sufficient for code monkeys, but OP was talking about getting a CS degree, not doing a coding bootcamp.
> Scheme
SICP is not about Scheme, it's just the tool used. They don't even use Scheme specific stuff in it (no macros, call/cc, etc.), you could do it in any language with higher order functions (although the last two chapters would lose most of their beauty).
Anamika · 2017-08-12 10:29
>>2889
>That might be sufficient for code monkeys, but OP was talking about getting a CS degree, not doing a coding bootcamp.
I think you missed the point of this article. Modern software is too complex to split out into isolated building blocks the way SICP teaches. It's a style of thinking that does not work in the real world and that's why MIT stopped teaching it.
>SICP is not about Scheme...
This was a response to the comment on computer architecture because when SICP was written, Lisp hardware was a thing.
>you could do it in any language with higher order functions
That's not true. It also requires tail call optimization (so no Python). You don't seem to know as much as you are pretending.
Emmanuel · 2017-08-12 19:25
>>2890
>Modern software is too complex to split out into isolated building blocks the way SICP teaches.
That's not modern software; that's more like post-modern software, except you're completely ignoring modernism instead of augmenting it. Programming has always been experimental; it either works or it doesn't. But that doesn't mean that rigor goes out the window. Neglecting good design for experimental success rapidly leads to unmanageable projects. SICP is novel because it's an intro book about designing programs. SICP isn't an extended language tutorial about implementing programs (A Java textbook). SICP isn't a book about data structures and algorithms, since programming isn't about them. SICP was for the longest time the only introductory book that provided general knowledge on programming. SICP's knowledge is still as relevant today as it ever was. But HtDP might be alright as well.
nanophyr · 2017-08-12 22:43
Finished a part of my CS degree now.
Started reading SICP over this summer and it's been pretty good read.
That said it is definitely not the easiest thing to just pick up and learn key concepts from... I found that it explained concepts pretty poorly at times even though the content is largely good.
To accompany my lectures I read "Computer Science an Overview" by glenn brookshear.
It seemed to be a pretty good textbook to go look up general first year topics
The Plague · 2017-08-14 12:36
Currently in 11th grade and working through the edX CS core courses+ reading "The Clean Coder" in my free time.What are some similar courses/books that I can use to get gud.
>reddit.com/r/dailyprogrammer ?
>cs50 course on youtube ?
t · 2017-08-14 12:42
>>2930
CS50 on edx. Use their exercises on the edx platform.
After that:
https://github.com/open-source-society/computer-science
I don't recommend the book "clean code" for beginners. To understand what is and what isn't clean code, you must have some experience with programming. The book is probably not worth your time if you don't have any parameter.
Hiro Protagonist · 2017-08-14 12:54
>>2931
Ty anon.
x<->y · 2017-08-18 04:34
>>2860
These have helped me:
https://functionalcs.github.io/curriculum/
https://teachyourselfcs.com/
H.R. Giger · 2017-10-11 15:30
Bump cause im starting next year and i want a head start.
Neo · 2017-10-18 19:46
>>2860
what languages will you be studying
3rd year CS student here
Ivan Horvat · 2017-11-15 06:58
when I give advice on "how to learn programming", that is how to be a competent general programmer rather than an overspecialized jobber like most working programmers are, the two points I emphasize are:
1) treat fundamentals like martial arts kata, if you integrate the absolute basics into your psyche so that you can use them *without thinking about them* all the rest is just details. this means at a base level variables, flow control, and scope. then indirection and recursion. practice that until it becomes part of your being and you can understand anything
2) learn a language, understand the language. learn enough of a couple other languages in the paradigm to see how they relate to each other, be able to pick out what of their differences are just syntax/style, identify the fundamental concepts. understand the paradigm. learn a language in a different paradigm. once you get over the curve of having to do everything different, begin to see how the approaches relate to each other, how they accomplish similar tasks using dissimilar methods, think about how you could implement the methods of one using the other. once you can understand how different paradigms relate to each other, you are a programmer
most programmers don't think about it like this, but most programmers are soykaf. they make up for lack of comprehension with overspecialization, learning all the gotchas and quirks of one particular language or workflow, unable to exist beyond it. people who do this for a decade or two seem imposing and sagely to their coworkers, but it's accumulation of information, not understanding. but someone who understands in the manner I've described can in a couple weeks with a new language outclass someone who's been writing it for a couple years
personally if I were to teach an intro programming course I would start with a very restricted C-like subset of javascript, just variables, functions, objects/arrays, while, for, if, switch. no prototypes or prototype methods, nothing like that. do the normal 101 soykaf. then introduce map, reduce, and filter, mandate single-assignment, work through similar projects as before with the emphasis being on how you can do the same things in this different way. after this show how to implement the hofs using recursive functions. this would cover one or two semesters idk. separate 201 classes for C and a functional language after that
>If you want the whole package (friends, job recommendations, social interaction) college is a good idea, but if you just want education, college usually is worse than free education.
also agree with this 100%. if you go to college have a plan to get something out of it other than the education or credential, the education you can get on your own easier and faster if you're reasonably intelligent, and the credential is meaningless in techland
Linda Lee · 2017-11-15 20:04
>>2860
Don't study algorithms using the Cormen book. It's a good book but it's better used as a reference book than to learn from. I learned algorithms by myself using Intro to Algorithms by Udi Manber before I went to CS grad school (my undergrad was physics). It's a great book for learning because it guides you wrt how to think to solve an problem.
Nguoi La · 2017-11-16 14:51
>>2860
If you're starting from the absolute beginning (or have never touched a lisp before), I highly recommend http://www.ccs.neu.edu/home/matthias/HtDP2e/
Yuki Nagato · 2017-12-25 13:43
I have a question: are these books in my chart are good for learning in three years? I started programming with fourteen years as a hobby, but, now with nineteen, I want to turn this into a career (I have formation in a IT course).
Sipho Nkosi · 2017-12-26 13:57
>>5837
I would skip the language specific books unless you have an interest. Programming languages are not pokemon, you shouldn't waste time trying to learn them all.
Void · 2017-12-26 14:07
>>5849
I don't want to learn all of them. I'm focusing on Java and Python only, in addition, the only one I will learn in parallel will be C.
Agent Richard Gill · 2017-12-26 14:07
>>5850
>by the way
if · 2017-12-26 14:08
>>5850
I forgot to mention, ignore Haskell and the others.
The Plague · 2017-12-27 00:27
>>5837
seems almost like overkill.
You work through sicp and clrs and you already know 80% of a CS degree. Plus you got a book on Databases and several on network and OSes (the tannenbaum ones) if I see it correctly so you should be fairly set.
Just actually work through the exercises in the books, dont just read them like novels.
Cypher · 2017-12-27 07:24
>Confessions of a College Professor
Read that entire blog then re-evaluate your choice to go to college
Splicer · 2017-12-27 12:31
>>5860
I want to finish this chart in three years. I'll wear it during my CS graduation (just for contacts and employment). Also, I no want to be a Indian any in IT.
Trinity · 2017-12-27 18:52
>>5852
Not the same person as in >>5837 but I would like to ask. Why ignore Haskell? Just started to look into Haskell a few days ago and I'm really interested in why Haskell isn't a good language to learn (I already know a few other languages so this isn't something I need for my career and I'm doing it for fun)?
Torvalds · 2017-12-27 23:08
>>5882
>Why ignore [language X]?
It's not about ignoring [language X] it is ignoring all languages not relevant to your goals.
BloodCat · 2017-12-27 23:18
>>5886
>it is ignoring all languages not relevant to your goals
This.
Cutter · 2017-12-28 05:33
>>5837
>are these books in my chart are good for learning in three years?
If you actually read and understand all that you're going to be much better read than a big chunk of your competitors.
Tier 1 has some language-specific books which will get you started and provide you with useful skills right off the bat. The Python automation book is especially valuable. It's also got a great OS book. Database knowledge is extremely valuable but I'm not really sure how thorough that book is so check this out too: http://www.redbook.io/
Tier 2 has computer networks, cryptography and another great OS book. Those are really important topics. I'd leave those language reference books for later. Maybe even replace them with more networks and cryptography books.
Tier 3 has code complete and intro to algorithms. You must read those two at the very least. Read K&R too if you're learning C and read C Programming: A Modern Approach immediately afterwards. Design patterns are essentially ways to overcome the limitations of specific programming languages, notably Java. It's not going to significantly enrich your mind. I think Effective Java is a better book, it's really great for learning how not to shoot yourself in the foot in that language.
Tier 4 has SICP and the dragon book. They're awesome. If you're like me and like programming languages the dragon book will be very interesting and useful to you. I'm uploading another great book on parsing to supplement your reading in case you're interested. I've never read those books on data structures/algorithms and AI myself.
> I started programming with fourteen years as a hobby, but, now with nineteen, I want to turn this into a career (I have formation in a IT course).
I followed a similar path. I learned C++ in a vocational/technical high school and kinda just went from there. In the years that followed I learned many programming languages and read many of the books in your list.
>>5850
I learned Java through Sun's official tutorials on their website and by reading Effective Java 2nd edition. Python can be learned quite easily online.
C is more complex. You should read K&R and then follow up with C Programming: A Modern Approach.
cond · 2017-12-28 20:08
>>5886
Ok, fair enough. But can you predict what will you need in 5 or 10 years? I mean sure, the industry is mainly C, C++, Java, Python right now (and probably a few other languages), but this can change. Extra knowledge is never a bad thing as it lets you look on thing in a different way and it expands your horizons.
I would rather say don't focus on [language X] as it does not serve your goal but take a look at it to find out what is it (unless you have a really good reason not to, and in this case if something won't reach the industry with 100% certainty, like Brainfuck).
You could also argue that there is no time to learn all the language, and that is true, but I'm not saying that you should be proficient in a given language, but rather know what makes it different from the rest.
Hong, Guil Dong · 2017-12-29 00:26
>>5904
I am so sorry that I insinuated in the most indirect way possible that Haskell might not be worth learning. Haskell is the greatest language in the universe. All hail the monad. now fuarrrk off
John Titor · 2017-12-29 11:25
What's a good book for theoretical computer science (theory of computation, formal languages, state machines, etc)
H.R. Giger · 2017-12-29 15:00
>>5910
Hopcroft, Ullman, et al.
Batou · 2017-12-29 16:54
>>5910
>languages
The book I posted in >>5893 covers some computational linguistics concepts.
FILLER · 2017-12-30 17:14
>>2871
Check your facts. SICP was written for EE majors.
quote · 2017-12-30 19:56
>>5932
Source?
Just another Random Lainon · 2018-01-01 11:48
>>5932
>tells others to check their facts
>doesn't have any facts
Good job.
Lady 3Jane.. · 2018-01-02 00:27
>>5893
Thanks for the reply, anon.
Also, I'll be focusing first on being a full-stack developter, because I need money to sustain me (Unfortunately, I'm born in Brazil).
Which of these technologies should I choose?
1° Step
HTML / CSS
-Flex / Grid core fundamentals
-Responsive layouts
2° Step
Vanilla JavaScript (Puro)
-DOM manipulation & events [NO JQUERY]
-Ajax/Fetch API/Json
-ES2015+
3° Step
Deploying a Basic Website
-Shared hosting (InMotion, Hostgator, etc.)
-Learn the basics of cPanel (Creating email accounts, FTP, etc.)
-Upload a site with FTP (FileZilla)
-Register a domain name and learn about DNS/NameServers
4° Step
HTML / CSS Framework (Choose One)
-Twitter Bootstrap 4
-Materialize CSS
-Bulma
-Zurb Foundation
-Skeleton
5° Step
Front End Js Framework (Choose One)
-React(Popular for startups)
-Angular (Popular in enterprise)
-Vue.js
-Aurelia
6° Step
Side Technologies You Should Learn
-GIT
-Basic Command Line (Folder navigation, file creation, etc)
-APIS/REST (Learn how REST APIs work)
-HTTP/SSL (HTTP requests, HTTPS)
-CSS Pre-Processor (Sass or Less)
-Webpack & Babel (Module loader & JS compiler)
7° Step
Server Side Technology (Choose One)
-Node.js
-Python
-Ruby
-C# & ASP.NET
8° Step
Database (Choose one)
-MongoDB (NoSQL, non-relational, suggested for Node.js)
-MySQL (Popular relation database)
-PostgreSQL (Powerful but a bit more difficult than MySQL)
-SQL Server (Microsoft's implementation of SQL)
-Oracle (Heavily used in enterprise)
-Firebase (Cloud database maintained by Google)
9° Step
Server Side Frameworks (Choose one)
-JavaScript (Express, Hapi.js, Adonis, Loopback, Swagger)
-Python (Django, Flask, Web2py, Pylons)
-Ruby (Ruby on Rails, Sinatra, Nitro)
-C# (.NET)
10° Step
Content Management Systems
-Wordpress, Drupal, Joomla (PHP)
-Great for clients
-Thousands of plugins / addons
-Fast development
-Can be limiting
11° Step
Dev Ops & Deploying Applications
-Dedicated Server/VPS
-Cloud Hosting (More cheaper) - Digital Ocean, Heroku, Amazon Web Services
-Cloud Storage (Amazon S3)
-Working with SSH & command line
12° Step
Mobile Applications
-React Native
-NativeScript
-Ionic
-PhoneGap/Cordova
-Xamarin>>5893
Gyula Kovacs · 2018-01-02 18:13
>>5954
Step 1, 2 and 3 are mandatory.
Step 6 is extremely important. No idea how anyone sane could possibly think of git and HTTP as "side technology".
Step 7 is just 4 programming languages. You should learn all of them. Start with Node since you've already learned JS in step 2, then learn Python and go from there.
Step 8 is databases. Start by learning the theory so that you actually understand what relational databases and SQL are all about. Then learn the fuarrrk out of MySQL and Postgres. Learn the rest only if you actually need to. MongoDB is junk, learn it only if you're getting paid to fix someone's doomed project. See the redbook link I posted for deeper knowledge.
Step 11 should be good if it's a practical course. Overlaps with step 3.
The rest boils down to learning libraries/utilities/frameworks/current technological fashions. You can just look them up and read their documentation to figure out how to use them. You can read and write English so you're already ahead of the vast majority of your Brazillian competitors.
queue · 2018-01-02 19:00
>>5954
I would look at job postings near where I live and figure out what is most popular.
And don't worry too much about "learning" many things. It is better to know 1 technology very well rather than know 4 things poorly. What is important is that you can do something useful with what you know. It is a much better use of time to build a full application and put it on Github rather than to do "hello world" in 50 programming languages.
Zuse · 2018-01-02 20:21
>>5960
Thanks a lot, again, anon.
I'll be following your recommendations, anon. I'm currently reading the Java book written by brothers Deitel (I don't trying turn myself in a Indian) and another about OOP with Bluej.
I want to finish this week the studies on the subjects mentioned in steps one and three. My focus is until the end of 2018 is to be starting working as fullstack developer, because I intend to enter the graduation CC and concomitantly to start in the books mentioned in the chart and in its suggestions.
>You should learn all of them.
Why all? Would not that be impossible? As was mentioned here >>5961.
>Step 8 is databases. Start by learning the theory
Leave this for to learn later, would be wrong?
Also, I will use this book for JS: http://eloquentjavascript.net/
>You can read and write English so you're already ahead of the vast majority of your Brazillian competitors.
Kek. If you knew how Brazilians are monkeys in IT, you would be terrified.
Sabo Engle · 2018-01-02 21:14
>>5963
>Why all?
Because those 4 languages are not just great, they are extremely useful. Javascript is ubiquitous, powerful and people sink a lot of money into high performance implementations. Python 3 has lots of libraries for both common and niche use cases. C# is really good, evolves as a language much faster than Java, sits on top of the very high quality CLR and has a very rich job market. Ruby incorporates some great Lisp and Smalltalk features and functions as a better Perl: great for Unix scripting and string processing.
>Would not that be impossible?
I learned those 4 and some others too. It did take years though. Definitely not impossible given enough time, so make it a long term goal.
You definitely should prioritize. You should learn JS inside and out first. Step 2 on your list. Other languages are step 7, and knowing JS will let you easily learn Node.
Don't simply stop learning after you're done with JS though.
>Leave this for to learn later, would be wrong?
It's not wrong. Relational databases is an advanced topic, that's why it's step 8. Learn the basics first.
>If you knew how Brazilians are monkeys in IT
I know. The only way out is to learn English and start educating yourself directly from the source.
Tank · 2018-01-02 21:27
>>5964
> C# is really good, evolves as a language much faster than Do you advise me not to invest more in Java?
Apoc · 2018-01-03 03:45
>>4988
Could you recommend few books for starters following your methods, dear lain? Or maybe write some more concrete ways of approaching this way, if it's not a problem.
setq · 2018-01-04 01:05
>>5965
From a linguistic point of view, it's clear that C# has surpassed Java in many ways a long time ago. I think it's because Oracle bought Sun pretty much just to sue Google over Android's use of Java. It's catching up but C# is still way ahead in the game.
From a practical point of view there isn't much difference. The JVM and CLR are extremely well-engineered virtual machines and will allow you to go far no matter what you choose. The languages themselves are similar enough that learning one will allow you to transfer a lot of knowledge to the other if you need to. Choose based on the libraries you want to use and the jobs you expect to apply to.
If you want to be a front-end developer you should focus on neither of those and learn Javascript instead.
Stallman · 2018-01-08 19:41
>>5960
I'm not the quoted, but I'm also brazilian. Which language/book would you recommend me to start with?
Considering the chart from >>5837.
Thanks in advance.
Wintermute · 2018-01-09 03:02
>>6040
Python.
Turing · 2018-01-09 18:46
>>6045
Thanks for the reply. I've already gone through the book 'Learn Python the Hard Way', but it wasn't very insightful. I am goign through SICP right now but I'm sometimes getting stuck in the exercises - note that I'm still at Chapter 1.
>>6053
What would be your recommendation, fellow lainon?
vector · 2018-01-09 18:48
>>6054
>going
Autofix'd.
Agent Smith · 2018-01-09 22:55
>>6054
Should I just try to go into HtDP first, and then SICP? Or tackle a Calculus book before going at SICP? No idea how to proceed here. ;_;
Liet Kynes · 2018-01-16 10:00
>>6058
Anyone?
Masami Eiri · 2018-01-16 11:56
>>5837
The algorithms book is a good one. You may want to get some supplementary material on writing mathematic proofs for it. Few of the exercises are "write code implementing this algorithm" while the majority are "prove that this algorithm is O(lg n)" "create a greedy algorithm that performs in O(n^2)" and "show that X is np-complete"