[HN Gopher] CS101: Introduction to Computing Principles
       ___________________________________________________________________
        
       CS101: Introduction to Computing Principles
        
       Author : tosh
       Score  : 300 points
       Date   : 2022-07-10 10:29 UTC (12 hours ago)
        
 (HTM) web link (web.stanford.edu)
 (TXT) w3m dump (web.stanford.edu)
        
       | [deleted]
        
       | triska wrote:
       | The impression I get from this schedule is that this is a
       | collection of quite _ad hoc_ topics that are in some cases quite
       | far removed from what I expected to see covered in a course that
       | is intended to introduce computing _principles_.
       | 
       | For instance, are "For Loops", "If Statements" and "Spreadsheets"
       | really essential to computing, can these concepts be considered
       | "computing principles"?
       | 
       | What about logic? I note there is a reference to "Boolean Logic"
       | as one part of the "Spreadsheets and Data" lecture. What about
       | models of computing, or defining what we even _mean_ when we say
       | "computing"? The lecture notes hint at some of these topics in
       | the final lecture ("Theory and Conclusions"), almost like an
       | afterthought.
        
         | rjsw wrote:
         | I remember finding out that a Biology major taking an
         | "Introduction to Computing" course had still not touched the
         | keyboard after six weeks. If a course like this helps people
         | without a programming background get started then that seems
         | good to me.
        
         | zasdffaa wrote:
         | I agree it's weird, but as someone with a decent CS
         | background...
         | 
         | > What about models of computing, or defining what we even mean
         | when we say "computing"?
         | 
         | ... I found all I've learn is worth nearly nothing in industry.
         | Which saddens me and it shouldn't be, but it is so. Really
         | basic principles get useful but only in very high-end areas,
         | stuff that I can barely comprehend (eg. automata for model
         | checkers etc).
        
           | feet wrote:
           | Which part of the industry do you work in?
        
             | zasdffaa wrote:
             | IT contractor. Much of it DB stuff. The range of work you
             | do goes from 'sit here and scrub data' to being given a
             | free-ish rein when you've proven yourself, and then you can
             | be very creative.
             | 
             | It's all business-oriented work, as in, we need this ASAP.
             | I'd like to do more research-oriented work, or at least
             | cutting edge. Something that's solving longer term business
             | problems, not just 'get it done yesterday'.
        
           | ascar wrote:
           | > I found all I've learn is worth nearly nothing in industry
           | 
           | It really depends what you work on. Doesn't even have to be
           | high end. When working on performance critical code I was
           | glad about my computer science and math education more than
           | once. And performance can get interesting even at a few
           | million users or regardless of user-count in realtime
           | applications. When writing business logic without performance
           | and scalability in mind, yea, all that knowledge remains
           | dormant. Reality is that there is simply far more business
           | logic work out there than performance critical code.
        
             | zasdffaa wrote:
             | All my understanding of perf-critical code has come from
             | understanding of the usual - pathological cases for
             | algorithms, memory layout, cache friendliness etc. etc.
             | None of that except perhaps a very little of the first,
             | came from my formal education, it's all been down to me
             | reading up on stuff.
             | 
             | Can you give me an idea of what your CS & maths education
             | gave you that you found so useful for tuning code? Maybe
             | I'm missing something important.
        
               | ascar wrote:
               | > algorithms, memory layout, cache friendliness
               | 
               | all of this was an integral part of my formal education.
               | Algorithms and datastructures and complexity analysis was
               | mandatory in the undergraduate studies, the lower-level
               | stuff mostly in elective postgraduate classes of my
               | computer science program. From the top of my head also
               | things like operating systems, compilers, networking,
               | vectorization (SIMD), instruction pipelining, branch
               | prediction, threading, NUMA, thread-pinning/affinity that
               | help understanding how my code is actually executed. On
               | the math side set theory, probability theory and analysis
               | also came in handy more than once. Linear algebra I guess
               | if I had to deal with matrices, which is probably
               | relevant in the AI/machine learning fields (not my area
               | of expertise). All of my math education was mandatory
               | undergraduate classes.
               | 
               | Sure, it's well established that you don't need formal
               | education to learn all these things (which applies to
               | most fields, not just CS), but they are certainly part of
               | computer science and taught as part of formal education
               | at I would assume most good universities.
               | 
               | From my experience (which is Germany and Japan, not the
               | US) especially postgraduate degrees are what you make of
               | them. You can learn nothing relevant for performance
               | critical engineering or you can learn a ton.
        
               | zasdffaa wrote:
               | >> algorithms, memory layout, cache friendliness
               | 
               | > all of this was an integral part of my formal
               | education.
               | 
               | Other than algos, we got none of this.
               | 
               | > the lower-level stuff mostly in elective postgraduate
               | classes of my computer science program. From the top of
               | my head also things like operating systems, compilers,
               | networking, vectorization (SIMD), instruction pipelining,
               | branch prediction, threading, NUMA, thread-
               | pinning/affinity that help understanding how my code is
               | actually executed.
               | 
               | We got compilers. Otherwise none of this - in fact these
               | are not computer science by some definitions. It was
               | pretty much maths at the end. I don't think we were well
               | served in some ways.
               | 
               | > which is Germany and Japan, not the US
               | 
               | I'm in the UK.
        
               | blibble wrote:
               | all of that was part of my undergraduate degree in the
               | mid 2000s as part of the core course
               | 
               | (oxbridge)
        
               | ascar wrote:
               | > We got compilers. Otherwise none of this
               | 
               | Did you have the option to take the relevant classes as
               | electives in your postgraduate studies? My postgraduate
               | had a single mandatory course and otherwise just required
               | that I spread my classes among 3 of ~7 major focus areas.
               | One of these areas was computer architecture, which
               | taught me most of the low-level things I listed above.
               | 
               | Another thing I forgot above was formal education in
               | distributed systems and databases, especially the
               | postgraduate databases class that covered the inner
               | workings (like transactions, WAL, dependencies,
               | rollbacks, etc.) and distributed databases, which nicely
               | connected with the distributed systems lecture (which
               | dealt a lot with CAP theorem and consensus, e.g. paxos).
               | That's also something you can learn on the job, but the
               | formal education gave a pretty broad background that I
               | would think is hard to learn on the job.
               | 
               | > computer science by some definitions
               | 
               | I guess if there is a distinction between computer
               | science and for example computer engineering they would
               | mostly end up on the computer engineering side of things,
               | which sits somewhere between computer science and
               | electrical engineering. Though the level on which I
               | studied these concepts in our computer science department
               | was to understand how it works, history and state of the
               | art and it's implications on software. It was less about
               | how to create such a system from the electrical
               | engineering side of things.
        
               | zasdffaa wrote:
               | > Did you have the option to take the relevant classes as
               | electives
               | 
               | Dunno. It was a long time ago. To be fair, a lot of the
               | stuff you mention learning just didn't exist back then -
               | it was a long time ago. Then again, we did a database
               | course and we got no hands-on with a real DB at all. It
               | was all random guff about functional dependencies etc. I
               | learnt literally nothing useful. I know about WAL etc
               | from learning after.
               | 
               | > I guess if there is a distinction between computer
               | science and for example computer engineering
               | 
               | You nailed it. Engineering vs science. The science was
               | taught purely in the abstract, application of it to real
               | problems was even held somewhat in contempt by one
               | lecturer. It could and should have been so much better.
        
         | NavinF wrote:
         | > What about models of computing, or defining what we even mean
         | when we say "computing"?
         | 
         | IMO starting with that is the worst possible way to introduce
         | CS to students who are (statistically) far more interested in
         | programming and software engineering than in CS. Hell, most
         | students in this class are probably there only because it's a
         | prereq for the class they actually want to take.
        
         | rst wrote:
         | It's a first course in _programming_ , with occasional glances
         | at other relevant topics, whatever the title.
         | 
         | MIT tried to do an intro course which was actually an
         | introduction to _principles_ , but the effect was so harsh that
         | undergrads without previous background in programming were
         | often advised to take a more conventional "intro to
         | programming" couse first. The textbook, "Structure and
         | Interpretation of Computer Programs", is still available -- but
         | the course is no longer taught at MIT, after they decided it
         | was no longer serving the needs of the students.
        
           | drc500free wrote:
           | Thank you for giving me a flashback to 20 years ago,
           | realizing that I couldn't perform in 6.170 because I didn't
           | know Java but there were no Course 6 classes that taught
           | Java.
        
         | UncleMeat wrote:
         | In my experience, the huge majority of people who take an intro
         | CS class want to learn how to solve problems with programs and
         | to learn how other people solve problems with programs. At
         | Stanford, almost every single undergrad takes an intro CS class
         | but only a fraction of those go on to major in CS or get a job
         | in software. You've got one class to provide useful information
         | to people - teaching people about models of computation or set
         | theory is not going to capture people's interest or help them
         | meaningfully in the future. But if somebody says "hey, I know
         | enough python to figure out how to split up a huge PDF into
         | individual files, one for each page, then suddenly they are
         | empowered to solve problems.
         | 
         | Same reason we wait until Real Analysis to teach delta-epsilon
         | limits while the engineers are off taking PDEs.
        
           | cinntaile wrote:
           | > Same reason we wait until Real Analysis to teach delta-
           | epsilon limits while the engineers are off taking PDEs.
           | 
           | This is very country dependent, we were taught delta-epsilon
           | limits in high school. Maybe not with the same depth, I don't
           | know.
        
         | indymike wrote:
         | If you look at the "lecture notes", yes it seems ad hoc. After
         | looking through some of the readings, I think this is a
         | fantastic, very comprehensive survey class.
        
       | molticrystal wrote:
       | When a person completes week 4, they'll have learned boolean
       | logic, if/for loops, bytes & variables, and had an overview of
       | hardware from the previous weeks.
       | 
       | If the person is ambitious, that is the minimum required to
       | begin, and it might be worth seeing just how far they can get in
       | Nand2Tetris[0] where a person simulates building elementary logic
       | gates and circuits leading to an also very basic Arithmetic logic
       | unit and simple ram from nand gates.
       | 
       | I wouldn't expect the person with just a few weeks of CS101 to do
       | week 4 of Nand2Tetris where they try out machine language on
       | their machine that leads to building an assembler, and then a
       | compiler, as this eventually requires knowing Java or a similar
       | language, but more power to them if they preview the course and
       | see how much they can understand.
       | 
       | [0] https://www.nand2tetris.org/
        
       | john1633 wrote:
       | There is an error on the 16th slide of the second lecture: XOR
       | only returns true when the inputs are _not_ the same.
       | (https://web.stanford.edu/class/cs101/lecture02.html#/16)
        
       | [deleted]
        
       | israrkhan wrote:
       | I like the course, but more than the course I like various
       | recommendation in this post. This is best part of HN.
        
       | gorgoiler wrote:
       | Are functions part of the course? Functions are both extremely
       | practical for real world problems where code is repeated but with
       | different values, as well as of course being fundamental to the
       | theory of computation.
       | 
       | I very much enjoy introducing my pupils to functions. It is the
       | first time they really get to use the computer as a tool for
       | accelerating their abilities. Up until then, their code has
       | utility in the order of how much they wrote. Functions can let
       | you write a page of code that does so much more.
        
       | photochemsyn wrote:
       | This looks like a very practical course that introduces a lot of
       | tools/concepts valuable for any student in any field relying on
       | the modern computational setup. However, actually learning
       | programming however is just a time-consuming effort and there's
       | no real way around it. There's a whole industry built around 'we
       | can teach you programming in ten weeks' or whatever and it's all
       | nonsense.
       | 
       | Some years ago I was working full-time in a molecular biology
       | lab, and part of the job involved using a lot of computational
       | bioinformatics tools. I knew a couple of CS people who were
       | writing bioinformatics software and they showed me pages of code,
       | and I asked "realistically, how long would it take me to learn to
       | write these kinds of programs" and the answer was always "at
       | least two years of full-time effort" (It was mostly C code they
       | were working with at the time, plus Java for the user
       | interfaces). My personal experience finally learning to program
       | over the past few years is right in line with those estimates.
       | 
       | There aren't really any shortcuts, you just have to put in the
       | hours of work, week after week, month after month, year after
       | year. As with most fields, a lot of the introductory material is
       | outdated for modern industry but since the more advanced
       | technology relies on an understanding of the basics, you can't
       | just leapfrog it, that's like trying to learn calculus without
       | ever taking any algebra, or trying to grok CRISPR without knowing
       | how basic DNA replication works.
        
         | Arisaka1 wrote:
         | Not that I disagree with you but I don't see what the course is
         | promising as anything close to what you juts described and rant
         | about, and neither does it claim that it won't take time. Were
         | you perhaps attempting to respond to someone else's comment?
        
       | oxff wrote:
       | It's a weird porridge of topics.
       | 
       | Just do this instead: https://dcic-world.org/
        
         | srvmshr wrote:
         | HTDP by the same authors is a much more solid foundation. DCIC
         | is okay but I feel for a very narrow spectrum of people.
        
         | mrits wrote:
         | that books reads like an infomercial to a bad programming
         | language
        
       | no_time wrote:
       | How hard does it get later on? This looks very tame and quite
       | fun. In comparison, here in Hungary our "Basic computer science"
       | was filled to the brim with graph theory and was absolutely
       | joyless.
        
         | steve76 wrote:
        
       | xwdv wrote:
       | What I ultimately came to realize about all computer science is
       | that all problems are basically figuring out how you will do 3
       | steps:
       | 
       | 1. Organize data 2. Transform the data according to some input.
       | 3. Output a result.
       | 
       | Once you've very clearly mapped out your data structures,
       | everything else becomes fairly trivial. Functions are nothing
       | more than turning data from one form into another. Outputs are
       | just data in some new structure that can be easily consumed for
       | some other purpose.
       | 
       | I challenge anyone to find a problem that doesn't fit this
       | formula.
        
         | [deleted]
        
       | cardy31 wrote:
       | This has already been mentioned, but I can't recommend CS50
       | highly enough. It literally changed my life. I was doing a music
       | degree and ran into CS50 on Reddit somewhere and decided to give
       | it a shot. Long story short I ended up getting a CS degree and
       | working for a large tech company.
        
       | nightski wrote:
       | It is much more programming specific focused, but I still think
       | my favorite intro to programming course ever is the original 1986
       | Structure & Interpretation [1].
       | 
       | [1] https://www.youtube.com/playlist?list=PLE18841CABEA24090
        
       | SneakyTornado29 wrote:
       | BTW this is not the intro stanford cs course. Take CS 106A! It is
       | the best intro to CS I've ever seen. This course is like AP CS
       | Principles whereas CS 106A is like AP CS A.
        
       | khaki54 wrote:
       | This course looks "fine"; however, I would recommend that anyone
       | interested in exploring CS (or perhaps even if you are a self-
       | taught and very able coder who wants to learn those missing
       | fundamentals ) takes CS50 out of Harvard.
       | 
       | It is easily the most engaging course I have ever taken and it's
       | available for free on edx.org or you can take the "real" class
       | from Harvard extension for a couple grand. You can go into this
       | class as an underwater basket weaver or a strong coder and get a
       | ton out of it.
        
         | aabhay wrote:
         | I'd recommend CS 61a/b/c from UC Berkeley. I think it's
         | available online as well. The reason I like these three courses
         | is that they cover the three key aspects of computing --
         | programming, data structures, and machine structures. I find
         | that the last part is often left out because we "abstract" away
         | low level features of computers, but learning even the basics
         | of page tables, caches, instruction sets, timing, etc. is
         | extremely critical to a complete understanding of what's going
         | on.
        
           | pamelafox wrote:
           | I was the most recent instructor of 61A and just wrote up
           | tips on auditing it: http://blog.pamelafox.org/2022/07/how-
           | to-audit-cs61a.html However, I don't recommend 61A for folks
           | new to programming, it's better as a second course.
        
             | lunarboy wrote:
             | I took 61a under DeNero as a transfer with high school APCS
             | and college intro class experience, since the dept didn't
             | let me waive the scheme/lisp part. And I was shocked at
             | difficulty, like "no way kids programming for the first
             | time as freshmen can keep up with his course pace"
        
               | aabhay wrote:
               | Hm I took it under someone else so I'm not sure what it's
               | like these days. Sad that it has such a reputation.. I
               | was able to ace the course and transfer into EECS my
               | freshman year, so things probably have gotten much harder
               | in the last ten years.
        
             | pm_me_your_quan wrote:
             | I took it when I was an undergrad (that was ten years ago,
             | but I hope the spirit remains the same) as my first CS
             | class. It was very tough given my preparation, but the
             | thing I appreciated was that it gave a very general
             | introduction to many high-level concepts in fairly good
             | detail. I felt I had a solid starting point in many things-
             | programming paradigms, understanding data abstractions,
             | levels of abstraction in program design, etc that I don't
             | always see replicated in other introductory material.
        
         | cloogshicer wrote:
         | I honestly don't understand why people keep recommending CS50.
         | Maybe I'm just a slow learner, but I really think that if I had
         | had to learn programming with that course, I would never have
         | learned it - the learning curve is really steep, and it crams
         | way too many languages into a very short amount of time, making
         | you a jack of all trades and a master of none. I also don't
         | understand the obsession of CS curricula to have people
         | implement things like sorting algorithms by hand. This would've
         | really put me off as a beginner.
        
           | BossingAround wrote:
           | Agreed. I also didn't like CS50 very much, and I wouldn't
           | recommend it to folks. I think people love it because it's
           | entertaining.
        
             | lolinder wrote:
             | Has it occurred to you that your dislike for it may be due
             | to the fact that you're not the target audience, rather
             | than that there's a problem with the course? In your
             | previous comment (since deleted), you noted that you had
             | been programming for a few years before you tried it. It's
             | an introduction to the subject, so you were bound to find a
             | lot of it to be beneath you.
             | 
             | In my own experience working with a _lot_ of brand new
             | programmers, making the subject entertaining is 80% of the
             | battle. Most introductions to CS are unbearably dry and do
             | a very very poor job of motivating further study. The job
             | of an introductory course is to give an overview of what
             | you 'll learn going forward and make you _want_ to learn
             | those things, and by all accounts (even yours) CS50 does
             | that.
        
               | BossingAround wrote:
               | It absolutely has occurred to me that I'm not the target
               | audience. That said, I still think there's a problem with
               | the course in as much as I don't agree with the method
               | selected.
               | 
               | In other words, CS50 is probably great if it is the one
               | and only course a new person would take. This is due to
               | the broad focus on so many concepts.
               | 
               | However, if it is the first out of many courses, I would
               | not choose such broad focus. I would (and have done many
               | times) create a curriculum based on the student's needs
               | and desires.
               | 
               | That's why I don't like CS50. It's not because I'm not
               | the target audience necessarily, it's that CS50 is
               | overhyped and, in my humble opinion, not suited to be the
               | first course for serious self learners.
               | 
               | By not suited, I mean that there are a number of
               | specifications on Coursera that are a) also free, and b)
               | will lead one better to the goal if the goal is known
               | (which is where most newbies need a mentor). I do not
               | mean that CS50 is unsuitable; I mean that it is
               | suboptimal. In my experience, that is.
        
               | lolinder wrote:
               | Thanks for the substantive reply! It's good to get a
               | different perspective.
               | 
               | I think you may be right about it being suboptimal for
               | self learners. It was, after all, not really designed for
               | that. I disagree that the breadth of the course is a
               | flaw.
               | 
               | One major problem I consistently see with self-taught
               | individuals (including myself before college) is that
               | they have major blind spots, places where they don't know
               | what they don't know. A broad introductory course that
               | _intentionally_ doesn 't restrict itself to topics the
               | student is already interested in is the best way I know
               | to quickly turn those unknown unknowns into known
               | unknowns. Whether or not the student chooses to fill
               | those gaps in later with further courses, they'll be
               | better for knowing where the gaps are.
        
           | cardy31 wrote:
           | My experience was the opposite. I went in with absolutely no
           | programming experience. It took me a week to figure out how
           | to do the first problem set (boy are loops ever amazing).
           | 
           | CS50 got me interested enough in programming to pursue it as
           | a career. I have a CS degree now, and work at a well known
           | tech company.
           | 
           | I don't think the audience is "people who know some
           | programming already." It is designed for absolute beginners
           | and assumes very little about your prior programming
           | knowledge. I recommend it to any beginner looking to see what
           | computer science is about.
        
           | Aperocky wrote:
           | > making you a jack of all trades and a master of none.
           | 
           | Master of a single programming language is a moot concept, it
           | either boils through to other languages or you just memorized
           | the syntax really well.
        
             | bidirectional wrote:
             | This is going too far in the other direction. There are
             | absolutely people who have mastered e.g. Java, CPP or
             | whatever with language-specific knowledge. Being an expert
             | on JVM internals won't boil through to Haskell.
        
               | Aperocky wrote:
               | JVM is essentially project knowledge, if you're writing
               | code that requires you to understand JVM internals really
               | well, unless you're working on JVM directly, something is
               | wrong within the division of labor. Programming with java
               | requires no internal JVM knowledge bare the bare minimal
               | surface ones (execution args, etc).
        
               | BossingAround wrote:
               | We do have CLR, BEAM, HaLVM, and LLVM. Understanding the
               | JVM translates to understanding similar architectures.
        
               | bidirectional wrote:
               | Why? If you're working on a performance critical
               | application, you need that knowledge. Plenty of HFT firms
               | use Java.
        
               | markdestouches wrote:
               | What's the reasoning behind picking Java for a
               | performance critical application over something like C or
               | C++?
        
               | tester756 wrote:
               | https://news.ycombinator.com/item?id=12051639
        
               | nightpool wrote:
               | Well, being a master of JVM internals _does_ give you a
               | very strong grasp on a very useful basket of concepts for
               | GC and programming language implementations, so I 'm not
               | sure I would necessarily agree that there's no
               | transferable overlap. But regardless, neither of these
               | are applicable metaphors for a 101 level CS class--at the
               | introductory level, you're better getting a broader
               | survey of lots of different languages, because learning
               | the transferable fundamentals is more important than
               | learning the specific "trivia" of any particular
               | language.
        
             | BossingAround wrote:
             | Are you saying that beginners should always be taught
             | multiple languages? Why?
        
           | jacurtis wrote:
           | > I really think that if I had had to learn programming with
           | that course, I would never have learned it
           | 
           | This is one of the most common misconceptions in general with
           | educational institutions and the general software engineering
           | job market.
           | 
           | Programming is not Computer Science.
           | 
           | Computer science teaches you how computers work, concepts of
           | how encryption works, concepts of security, concepts of
           | memory management, and so forth. More recently computer
           | programming has been added as a part of Computer Science
           | degrees, but actually just a decade or so ago (when I was
           | going through it), you could graduate with Computer Science
           | degree without programming experience at all.
           | 
           | There is no doubt that learning computer science makes you a
           | better programmer, but it is different and it is possible to
           | be a good programmer without it.
           | 
           | Programming is one of the practical applications that benefit
           | from strong computer science knowledge. Just like how taking
           | a human anatomy course or a biology course doesn't train you
           | to become a doctor. But it's pretty important knowledge
           | needed for doctors to be good at their jobs (so much so that
           | we don't let people practice medicine without it).
        
             | scott_s wrote:
             | What Computer Science programs were you aware of where
             | someone could graduate with no programming experience? I am
             | unaware of any.
        
             | BossingAround wrote:
             | Quoting someone else in this thread:
             | 
             | > Harvard's course seems to be aimed at people who are
             | coders or want to be better at coding, so you learn about
             | different languages, algorithms/data structures, SQL and
             | such.
             | 
             | CS50 is definitely somewhere between "comp sci course" and
             | a "get coding quick" bootcamp.
        
           | noSyncCloud wrote:
           | All of these are compelling reasons to take this course. I do
           | believe you've talked me into it.
        
           | nojito wrote:
           | That's the whole point of the course. It's designed to be a
           | catchall introduction to CS.
           | 
           | Learning Programming != Learning CS
        
           | nverno wrote:
           | I remember learning mergesort as a beginner was a really eye-
           | opening experience. Going through the progression of sorting
           | algorithms seems like a perfect way to showcase the power of
           | algorithms- they are easy to implement and are used
           | everywhere. It's easy to forget how magical recursive
           | algorithms are to the uninitiated.
        
           | jstx1 wrote:
           | > making you a jack of all trades and a master of none.
           | 
           | - it's not about learning a language
           | 
           | - I don't think it's crammed either - it covers a lot but
           | everything is explained in a very accessible way from first
           | principles
           | 
           | - if an introductory course was using only one language, you
           | still wouldn't master the language
           | 
           | - being exposed to different ways to do the same thing is
           | very valuable and very underrated for beginners imo because
           | it teaches you to abstract over concepts - when you learn how
           | to read a file, write a loop, sort an array in each one of
           | C/Python/JS, you develop better understanding of the concept
           | of reading/looping/sorting instead of thinking that the only
           | way to do it is the way your first language does it; you
           | begin to develop a sense of which concepts are language-
           | specific and which ones carry over across languages. I think
           | it's better if this understanding happens early instead of
           | late.
        
           | lolinder wrote:
           | > making you a jack of all trades and a master of none
           | 
           | This is exactly the point of any introductory college level
           | course. They're never intended to be the end of your
           | education, they're designed to be a broad introduction to
           | most of the different concepts that you will be learning
           | throughout the program.
           | 
           | Even if you're not taking the rest of the program, having a
           | broad overview as a starting point is valuable. You won't
           | "master" _anything_ in 3 months no matter what you do, so
           | starting by going deep just needlessly limits your
           | perspective on how much there is to learn.
        
           | [deleted]
        
           | paulcarroty wrote:
           | CS50 is really good, and the instructor is real rockstar, not
           | a shame to recommend it too. Guess many people expected a
           | course like Codecademy with `print 'Programming is fun!'`.
        
             | BossingAround wrote:
             | The instructor is definitely great. Me, however, I prefer
             | to learn in a bit of a slower style, with less distracting
             | acting/performing.
        
         | toinewx wrote:
         | can you elaborate on why it is that good? why is it so
         | engaging?
        
           | jstx1 wrote:
           | Well selected material and great quality of teaching. It's
           | for complete beginners and it's very accessible without being
           | dumbed down in any way.
        
         | kevinventullo wrote:
         | I think this Stanford course is aiming at a different goal than
         | Harvard's CS50. Harvard's course seems to be aimed at people
         | who are coders or want to be better at coding, so you learn
         | about different languages, algorithms/data structures, SQL and
         | such.
         | 
         | The Stanford course, especially the second half, appears to be
         | more in the spirit of liberal arts. It covers high-level
         | concepts in CS (server vs client, how does the internet work,
         | what is encryption) that even someone who never writes code
         | professionally will be able to use. They'll be better able to
         | read newspaper articles on tech topics, or perhaps more to the
         | point, better equipped to be a PM/lawyer/BD in the tech space.
        
           | cardy31 wrote:
           | > Harvard's course seems to be aimed at people who are coders
           | or want to be better at coding, so you learn about different
           | languages, algorithms/data structures, SQL and such.
           | 
           | Hard disagree on this one. I learned how to program from CS50
           | with no prior experience. That introduction got me interested
           | enough to pursue it as a career. I would highly recommend it
           | for anyone who just wants to see what the whole programming
           | thing is all about.
        
           | cehrlich wrote:
           | Harvard's CS50 is specifically described as a programming
           | course for non-programmers.
        
           | mycelia wrote:
           | Yes, I believe CS 106A would be more analogous to Harvard's
           | CS 50.
           | 
           | https://web.stanford.edu/class/archive/cs/cs106a/cs106a.1228.
           | ..
        
         | photochemsyn wrote:
         | CS50 is a good course but this one has a very useful discussion
         | of open source and licensing issues related to various formats
         | that CS50 seems to lack.
        
         | otras wrote:
         | Strongly second CS50. I took it when first getting into tech,
         | and it was a very solid starting point to build my CS
         | foundation. I've heard from folks I've recommended it to that
         | they've continued to iterate and improve the course as well.
        
         | czernobog wrote:
         | I have been hearing a lot about cs50/cs50x. I will take as a
         | sign and start the course.
        
       | troupe wrote:
       | I'd highly recommend looking at the edX course "How to Code:
       | Simple Data" and "How to Code: Complex Data" as an introduction
       | to computer science. Those two classes were created around a
       | solid pedagogy of how students learn to break real world problems
       | down into code. Dr. Kiczales is incredibly good at taking
       | everything step by step and making sure nothing gets left out or
       | missed.
        
       | jdcampolargo wrote:
       | This is better plus you learn programming
       | https://www.learncs.online/
        
       | orsenthil wrote:
       | After learning programming, practicing with leetcode is a good
       | way to learn Computer Science. It will cover Algorithms, System
       | Design and Databases.
        
       | opnitro wrote:
       | Flagging my two favorite introductions to computing:
       | 
       | How To Design Programs: [https://htdp.org]
       | 
       | A Data-Centric Introduction to Computing: [https://dcic-
       | world.org]
        
         | vo2maxer wrote:
         | Great suggestions. Thank you.
        
       ___________________________________________________________________
       (page generated 2022-07-10 23:00 UTC)