Hacker News new | past | comments | ask | show | jobs | submit login
OSSU: A path to a free self-taught education in computer science (github.com/ossu)
474 points by paulygarcia on Sept 24, 2019 | hide | past | favorite | 172 comments



As someone who has lived through a big chunk of the 'computer science' lifecycle arc :-) My perspective is a bit different here.

"Programming", or the skill of writing specifications that can be translated via software into product has come a long way from the 60's to the present day. People I meet, interview, and work with, often fall into three broad chunks of the spectrum.

At one end there are 'coders', who are essentially cooks, they take previously written code, adapt it to their requirements, attach it to third party libraries and ship the end result. They have been essential to the boom in Internet companies for decades because they ship a lot of code and they are relatively inexpensive (with respect to the expected generated revenue) to hire. When their code doesn't work as they expect they generally iterate on it using other suggested solutions until they arrive at one that operates the way they need/want it to.

In the middle are 'engineers' who build more at the system level and can fill in the gaps with third party software when needed but are also fully capable of generating the required capability starting with a blank screen. When the system doesn't work they expect they can analyze it from first principles to get to the root cause of the problem.

At the other end are 'scientists' who think about the problems of the nature of computing. These folks rewrite an algorithm in three different ways to understand how different compute architectures might execute it. Driven by the joy of discovering new insights about how computers work, if something they build doesn't work they are delighted because it has illuminated a gap in their understanding that can be productively filled.

Different educational settings are useful for addressing the goals of the student, and in my experience those goals will be different depending on where on the spectrum of 'programmer' they see themselves.


Simplistic but it's a pragmatic way of looking at things.


This has some good courses, but in general seems overly long and is of inconsistent quality.

As an alternative, https://teachyourselfcs.com/ is a curriculum from the folks at Bradfield, but it's narrowly focused on core CS concepts/topics.


The big problem with projects like this is the quality is pretty much lacking. Most of those MOOCs to begin with are no way intended to replace the equivalent college class. Most of them are watered down introductions to the courses. At a baseline for me to take any MOOC seriously then I want to see a high-quality textbook (or equivalent) for the course. If that doesn't exist then my opinion is the course is likely to be of low-quality. I'm sorry but replacing a textbook with a series of online blog articles or tutorials is simply not a sufficient replacement.


The site gp posted addresses your concerns. All the topics listed in that site primarily focus on textbooks with the videos or courses as additional resources.


What does gp stand for?


GP stands for grandparent.

In case you need an explanation: in the context of a forum, the parent comment is the one you are replying to, and the grandparent comment is the one your parent comment replied to.


Thank you


Quality of MOOCs varies a lot. The edX ones tend to be more like regular college courses if you are selective. Coursera and Udacity are more MOOC-specific courses.

Even within edX, the quality varies a lot. The Harvard introductory course is really for non-CS majors and would be a waste of time for CS majors. The MIT course is for CS majors.


Not being harsh to the OSSU team - they've done a great job and hopefully they can comment on this - but I prefer TeachYourSelfCS. - Because (a) they provide both Book AND Video/MOOC resource for each topic and (b) its a lot more apparent what the 'core' knowledge you need to attain to get a solid undergrad level knowledge base is.

I also like this resource site - its a bit dated though: http://blog.agupieware.com/2014/05/online-learning-bachelors...

Also would be nice to get a simple roadmap like this https://roadmap.sh/frontend


I like Teach Yourself CS too, and I used it as an important source (or at least an inspiration) for parts of the OSSU/CS curriculum. I also use some of its recommended materials in my own private studies.

But since this comparison gets made often, I feel I should point out that TYCS doesn't provide a full CS curriculum. It might be better described as giving the basics of a software engineering curriculum, although even in this sense it seems lacking.

Consider that it excludes theoretical computer science (automata theory, etc.), a major core discipline of a computer science education, as you can see by looking at, for instance, CMU's requirements [0] for a bachelor's in CS. If we regard it as a CS curriculum, it also falls somewhat short in the resources it does recommend. For instance, I consider "The Algorithm Design Manual" very useful for software engineers but, compared to what else is out there, not terribly relevant for a modern computer science education. It also recommends either "Language Implementation Patterns" or the Dragon Book for learning about compilers, the former of which is only of limited academic interest (as the author acknowledges) and the latter of which is good but missing a lot of important developments in the theory and practice of compiler design/implementation.

If we treat it instead as a software engineering curriculum, it fares slightly better, but the resources it recommends for learning about programming are severely lacking. SICP is a gem but it doesn't teach large-scale software architecture (nor does HtDP for that matter). If SWE is what TYCS is going for, then this subject either belongs under Programming or under its own category, but it's nowhere to be found.

Unfortunately, OSSU/CS suffers from similar flaws in its content choices. But that has been due to our decision so far to only select material available in MOOC format; TYCS doesn't appear to impose this limitation on itself. All that being said, I'm just nitpicking that it feels incomplete for either CS or SWE. Every one of TYCS's recommendations is excellent and anyone would be well advised to follow it.

> they provide both Book AND Video/MOOC resource for each topic

The format in which we currently present the material is the major limitation here, as it revolves more around courses rather than topics. We are working on fixing this (albeit slowly due to other commitments I have). I myself much prefer text resources as I retain the material better, and I can easily reference back to it. My goal is to re-orient the curriculum around topics, providing recommended resources for each topic in both text and video format.

[0]: https://csd.cmu.edu/academic/undergraduate/bachelors-curricu...


This is a bit hypocritical coming from a self-taught dropout, but I have kind of grown to dislike a lot of these "learn programming on your own!" things/bootcamps/courses.

This isn't because of some idea that it's bad to learn programming for fun, but more that I think it's kind of reductive to try and squeeze things down to a streamlined lesson to begin with...There's a reason college takes four or more years; it takes a long time for these fundamentals to really sink in, and moreover, a lot of the "extra" classes you're required to take actually do inform your perspective on a lot of career stuff. For example, I hated taking philosophy classes and thought they were "pointless", but I recently realized how much they have helped me with logical thinking, and being able to justify decisions I'm forced to make.

If you're learning to code just for fun, these things are totally fine and can be incredibly fun, but if you're learning to code for a job, please don't treat these things as an "alternative" to college. Any kind of self-learning system almost universally requires a huge amount of self-study, probably more than a university, if you want to become any good at this stuff.


The issue I have with the "learn to ___ on your own" industry that's popped up is that it doesn't take into account accountability for the student. Take getting into shape as an example. Excluding obvious disabilities there's really nothing holding anyone back. Even with horrible schedules you can absolutely go out and join a gym, lose weight, and get ripped. Heck, you don't even need to join a gym. Everything you need you probably already have. And many people out there do. But the majority doesn't. Getting a personal trainer or joining a class adds accountability. On days that you don't want to train, well you have an appointment so you kind of have to or call it off.

In the end it takes the person pushing themselves. And unless the person has a real love for the material, people just won't. And it's kind of lousy that this is treated as a horrible personal failing when it's pretty much how people operate. Even a poor teacher at the very least adds accountability.


> In the end it takes the person pushing themselves. And unless the person has a real love for the material, people just won't.

Love for the material isn't the only possible motivation; people need motivation and discipline to stick with it, but the motivation doesn't have to be love of the material and there's no reason that that motivation or discipline has to be integrated. Some people will bring their own (of both), people that have the first can get the other by any number of means. Sure, there are programs that package everything (except probably basic motivation) together, and sure, they are good for some people, but they aren't necessarily ideal for everyone, and certainly aren't always the most cost effective for people that have their own motivation and discipline.


In that case, I wonder what putting down $10-100,000 as an incentive plan would do for a sample of student's resulting grades vs another sample spending that on tuition.


Investment is a factor but it's not the main one for me personally. It's the structured environment and comradery.


> Take getting into shape as an example. Excluding obvious disabilities there's really nothing holding anyone back. Even with horrible schedules you can absolutely go out and join a gym, lose weight, and get ripped.

Like always getting into shape is mostly about not eating rather than exercising. With our highly processed food one could do nothing but run marathons day in day out and still be morbidly obese.


I heartfelt disagree and believe that people that push this type of belief are the ones that think being skinny is being fit. Further, look at the amount of calories required to be a strong man. To be "in shape" IS about how much they consume.


I always look at the money.

If research that goes against the interests of a huge multinational oligopoly has an r value less than 0.1 it's probably true.

Saying that you should just exercise more is literally an opinion taken from a Coca Cola commercial: https://www.theatlantic.com/health/archive/2013/01/cokes-unc...


I'm 50/50 on this. Part of me really agrees with you -- you need time and practice and mistakes to learn this stuff. But also, I'm not sure it has to be wall clock time.

Four years at university gets you breadth that is probably good for you as a human, and probably important for contextualizing your work as an engineer (oh hey, history might be a valuable lesson for your understanding of ethics. Art and literature might combine with your computer science degree to inspire projects natural language processing or generative art.)

I think it's possible to condense down from 4 years for someone who is highly motivated and self driven. And honestly, I think many, many people's careers would benefit from going partway down the computer science path -- being able to script repetitive tasks or diagnose computer issues methodically will help you wherever you land.


>oh hey, history might be a valuable lesson for your understanding of ethics. Art and literature might combine with your computer science degree to inspire projects natural language processing or generative art

For what it's worth, this is a very American approach to college.

You generally wouldn't spend more than 3 years on an undergrad course as a student in the UK - because you tend to spend the vast majority of time on your chosen degree subject. There's maybe room for one or two optional modules in an unrelated field.


Possibly because the U.S. provides the "best high school education in the world.. It's just a shame you have to go to college to get it."

-- Alan Kay, some anecdote I forget how to locate


From the very proper English lady across the table from me at a supper at Douglas Adams' house: "You Americans have the best high school education in the world -- what a pity you have to go to college to get it!"


I think that depends on the country and the type of uni. I have some friends that have been at top notch schools, and I have taken the time to see how they did things, and the trivium and quadrivium seem to be the cornerstones for elite education (which I was trying to self-replicate). That said, it feels like public schools (which are actually private... why this silly naming?) in the UK do this better than private ones, which is why in the UK you spend less time on those things in undergrad and above.

In the US I don't think they hardly reference the trivium or quadrivium, but the structure is loosely based on the principle, so because they have lost the reasoning behind it their course load is much more wild and varied, and sometimes unnecessary.

This is also my main beef with those who claim we should just do vocational training or very narrow course loads... the benefit of wide but shallow knowledge is large when applied properly. The US just doesn't apply it very properly. One thing the US does do much better, I must say, is the egalitarian culture though, which offers people the opportunity to laterally move in education much more freely.


> That said, it feels like public schools (which are actually private... why this silly naming?)

Because of the nine originally-charity schools investigated by the Clarendon Commission, they weren't the two that established that they had constitutions guaranteeing their private character which made them immune to the kind of publicly-directed reorganization the other seven were subjected to under the Public Schools Act. That is, they are "public" in the sense that their basic organization was redirected by the State to correct problems found by a government investigation.

https://en.wikipedia.org/wiki/Public_Schools_Act_1868


In Australia, most of the technical / science subjects requires four years to reach a Bachelors degree. I think this is the norm for most universities.


I think if you want to do a great job, a four year CS degree should take about four years. You could maybe shave off a year by working through the summers and really pushing.

I’m pretty smart, and I worked HARD in my degree program. I did do some extracurriculars in adjacent fields that I could have skipped: psychology courses, a handful of advanced writing and math courses. And I took a handful of masters level classes that required a lot more time and focus. So probably there’s an easier path. But overall I would say doing a great job in serious CS classes is a full time job for all but the most exceptional students.

Sure there are genius types who could do it all in 18 months, and yes you could skim through it as a C-student on much less time. Or even as an A-student who just did the minimum to get the grades.

But if you really want to learn the material, it’s not easy and there’s plenty to occupy your time.

On top of that, there are all kinds of side projects that your education should be spurring, and which will feed back into your coursework. I learned PHP, SQL, and webdev in my spare time.

I just don’t look back and think “wow, there was a lot of wasted time there”.

In fact, for many courses (Statistics with Calculus, Electrically Engineering) I regret just doing enough to get a grade and deeply wish I had strived to understand that material deeply.

But I guess I’m kind of disproving my point... maybe with no extracurriculars, no graduate classes, and no side projects I could have done it in 2 years?

I guess, but I wouldn’t have gotten nearly the same benefit. Those things were part of what really made my degree formative.


> I just don’t look back [at school] and think “wow, there was a lot of wasted time there”

I can’t edit that post, but I want to add...

I DO look back the majority of coding jobs I’ve had in the Bay Area, and do very much think “wow, there’s a lot of wasted time there.”

Half or more of my time as a pro coder is spent undoing work I just did because the task wasn’t specced correctly, deciphering someone else’s bug because they merged it and left the office, dealing with the same broken infrastructure over and over because new features are always more important, building something that some Dir. Eng. wants, but is totally unproven and won’t matter to any metrics, etc.

I’m not passing the buck here, one of the main goals of my career is to become a better countervailing force to that stuff. But I want to highlight that making it into the workforce doesn’t mean you’re automatically spending all your time doing “real work”... sometimes it’s just the opposite.


I went back for my CS degree after working as a programmer for several years, and I agree 100%.

You can skate by in many schools with a C average taking the easiest classes and the easiest professors, but doing well is hard work.

(And for this reason, ai generally want to see a transcript for new grads.)


Sure, I don't think I disagree with any particular point you are making.

> I think many, many people's careers would benefit from going partway down the computer science path -- being able to script repetitive tasks or diagnose computer issues methodically will help you wherever you land.

I apologize that I didn't make it clear, but I'll clarify now: if you want to make your current job better, then these "teach yourself to code" things are probably great. You'll probably learn a lot to make your job less boring.

> I think it's possible to condense down from 4 years for someone who is highly motivated and self driven.

Yeah, as I said I'm a dropout, I do ok after ~1.5 years of regular school, then straight to the working world, so clearly it's possible to do these things, but I think this path is just sub-optimal. I feel like I had to practice stuff a lot more than I would have if I had just stayed in school.

But I will concede that it's possible, and school isn't for everyone; I just don't want to encourage the trend of people dropping out, and then thinking they'll make a ton of money in Silicon Valley. Yes, it does happen, but it's hard, and you'll have a much easier time if you just finish school.


The 4 years of college includes a lot of non-college time during summers, breaks, holiday vacations, etc. There is no reason why a serious student shouldn't be actively learning 50 weeks a year, minus holidays, and putting in the same work time as his peers who entered the job market after high school. In which case, 3 years is easily enough. However, 3 * 50 * 40 is only 6000 hours, which won't make you an expert.

The coursework listed on github for the OSSU is likely thousands of hours if pursued diligently.


> There is no reason why a serious student shouldn't be actively learning 50 weeks a year

Except... being a human? Having a family? Decompressing from the stress of studying? Earning a living? (I worked 35 hours a week in school so I could eat...)


The newly graduated BS-CS is going to be expected to work at least 40 hours/week, with two weeks vacation, and to study outside work hours to get up to speed with his co-workers.

And his cousin, the apprentice electrician has been working 40 hours/week, with two weeks vacation, studying to become a journeyman and doing all those other things.

Why are college students given such a light schedule?

(I also worked my way through college, but that seems to be less practical now, since the price of college has risen much faster that wages for jobs that students can get. Although I think it is a good idea for students to have jobs off campus to get an introduction to real work.)


> The newly graduated BS-CS is going to be expected to work at least 40 hours/week, with two weeks vacation, and to study outside work hours to get up to speed with his co-workers.

Wasn't my experience at any of the major or minor tech companies I've worked at. I've never been expected to study outside of work hours, and most places pretty quickly gave more than two weeks vacation.

> Why are college students given such a light schedule?

Presumably because they have hours of coursework every day, they should be socializing and networking, they have to work to feed themselves and pay tuition, they have a family to see to, and practicing/exploring their domain on their own?

I was enrolled in 20 credit hours/semester and worked 35 hours a week. Nothing about my schedule was 'light'. I think it's wrong to assume that college students necessarily have it 'easy'.


No, you're not allowed that!


From a physical standpoint there are enough hours in a week to work 40 hours and pursue 40 hours of university.

Except universities aren't something like an evening school that is explicitly designed around this idea. University lectures do not follow a nice time table that allows that. Lectures start at different times depending on the day of the week. Therefore your workday will start at a different hour every day, except all your colleagues still work their 9 to 5 schedule which will make you significantly less productive than them because you don't get to meet them every day. There can be gaps between lectures but you can't just go back and forth between university and work. It takes time to travel and even if you can do it in a reasonable amount of time you will end up doing multiple context switches per day. This makes working significantly more than 20 hours per week extremely hard.


That "10000 hours will make you an expert" thesis has been debunked. http://www.bbc.com/future/story/20121114-gladwells-10000-hou...


I find the "10,000 hour rule" odd (after reading both Ericsson and Gladwell). It's often misinterpreted as "10,000 hours of X will make you an expert in X", but that's not how I interpret the claims by Ericsson or the simpler repackaging by Gladwell.

I read the article you linked and was hoping it contained new research to clarify or refute the work done by Ericsson, but it didn't. The linked article regurgitates two of the key points in The Road To Excellence by Ericsson:

* You need to be engaged in deliberate practice (e.g pushing yourself outside of your current area of expertise). Not mindless work. I'm not an expert driver from my 10,000+ hours of commuting. * 10,000 hours isn't a set figure. It's an average at best. The premise is claiming that people in the top-tier (2%-5%) spent a lot of time consistently practicing their area before reaching the top-tier.

The "10,000 hour rule" hasn't been debunked. It just doesn't mean what some people assume it means when first hearing it refereed to as the "10,000 hour rule".


Yes, you might be engaged in "deliberate practice" , but that does not account for individual talent. Someone might take 5000 and another 20000. Gladwell dumbed it down.


Isn't it obvious? Learning how to hold a spoon takes less time than learning how to drive a car.


At the risk of being too self promotional.. you’re describing what we’ve done at Make School. An accredited 4 year bachelors condensed into 2 years of intense study, primary focus is project-based CS but we have a robust general education component as well.

As another commenter points out, the prototypical 4 year degree (which many in the US actually complete in 4-6 years) is a fairly American phenomenon. There’s plenty of precedent elsewhere for college as 2-3 years of rigorous study.


You're right, that was too self promotional.


I'm one of the maintainers of the curriculum.

> I have kind of grown to dislike a lot of these "learn programming on your own!" things/bootcamps/courses.

I somewhat agree, though I don't really see the problem with "learn to code" style programs if learning to code is precisely your goal. What I don't like is the seemingly widespread belief that learning to code is equivalent to learning computer science, when computer science doesn't even have anything to do with computers (as specific pieces of hardware). OSSU/CS is not a "learn to code" program; it mixes coding with computer science, and it's expected that it would take years for someone to get through the whole list of resources.

The second thing I believe I agree with you about is that we reject "learn programming on your own". While many people are interesting in starting to learn something on their own, drop off rates are extremely high for MOOCs. Most people cannot learn things on their own, and most MOOCs fail to provide the support needed by students. That's why OSSU is a community of learners that support each other, not just a curriculum.

> a lot of the "extra" classes you're required to take actually do inform your perspective on a lot of career stuff. For example, I hated taking philosophy classes and thought they were "pointless", but I recently realized how much they have helped me with logical thinking, and being able to justify decisions I'm forced to make.

I totally agree with this, except for the fact that I loved my philosophy courses in college :-)

OSSU/CS, at least in its current state, is not a replacement for a well-rounded education. Since we are not an institution, we do not have any general education requirements. It would be better to think of OSSU/CS as a resource that someone with a bachelor's degree outside of CS might use before applying to grad school in CS, particularly to avoid taking expensive remedial classes. That is exactly how I'm using it myself. We also have people already enrolled in a CS program at a formal institution, but still using OSSU/CS to get a different perspective on the same topics.


> drop off rates are extremely high for MOOCs.

I see this statistic tossed around quite a lot.

Maybe it's because many MOOCs require you (or at least urge you) to login and officially "enroll" in their course to see the content.

Many times I've been just looking around a MOOC out of curiosity, but I'm required to "enroll" in it in order to see the material. So I login, "enroll", take a quick look at the content and forget about it.

It's not necessarily a fault of the MOOC format.


Very true! I think all educational material should be openly accessible without login, and that enrollment should be something entirely separate and optional.


Just a note, I realize that I came off as overly-hostile towards OSSU; not my intention, I don't know anything about it and I apologize if I gave the impression that I was criticizing it specifically.

> I somewhat agree, though I don't really see the problem with "learn to code" style programs if learning to code is precisely your goal.

I agree; nothing wrong with learning to code if you just want to learn to code. I get a little frustrated that a certain subset of people treat these MOOCs as a replacement or alternative to college.


MOOC drop out rates are a fiction.

For example, I do some teaching and occasionally I will "enroll" in 5+ MOOCs (i.e. every MOOC covering the same or ismilar subject) because I want to see how each of them presents a particular tiny concept - because I can't see what is in their lecture 4 slides 10-12 without "enrolling" and subsequently "dropping out".


Citation needed. It is a big stretch to go from "some percentage of enrollees are just browsing" to "MOOC drop out rates are a fiction". The research that's been done on this shows that even if we adopt a much more narrow definition of enrollee, the completion rate is still very low. For example, in one study[0], "enrollees" were defined as those who answered at least one question right on the first quiz, and only 1/4 of those people finished the whole course.

25% is better than 3%, but both are very low compared to estimates of on-campus completion rates, for which I've heard numbers ranging from ~50% to ~65%.

[0]: https://www.insidehighered.com/news/2013/03/08/researchers-e...


I'm not claiming that the rates aren't much lower than on-campus completion rates, that seems quite reasonable, but my point is that it's useless to base any decisions of the official "dropout rates" since if the true rate is (as in your example) 25% then the 3% rate is quite literally fiction.

IMHO a good metric would be to simply ask people (probably on that first quiz) "What are your plans for working on this course?" where "I intend to finish the whole course" would be one option of many (and many people who answer at least one question right in the first quiz would honestly say that they never even intended to 'graduate') and then you'd get a reasonable completion rate by counting only those students.


> While many people are interesting in starting to learn something on their own, drop off rates are extremely high for MOOCs.

The near-(or at-)zero cost of MOOCs mean people will start them when they would not commit to something with a higher activation cost. To some extent, the stats on drop-off aren't signs of being worse at getting people to complete them (though that's probably a factor to), but at getting people to start them when they would not start other kinds of programs. Which is often still a win, significant learning can happen without completing a curriculum.


Everyone should through the Sedgewick and Cormen textbooks. I wish I'd done it earlier. Actually go through them carefully -- it will probably take at least 3 months, perhaps 6 months or a full year, depending on how much time you can dedicate. Most CS graduates don't go that far and just do the assigned reading.


There are many people who are 4+ year graduates in other disciplines who would like to learn coding to enhance their abilities. I really don't see why having self-taught pathways available to these folks (or simply those who can't afford college) is a bad thing.


I would argue that the people who see most benefited by these kind of things/bootcamp/courses are people who already have a degree in another field, are expanding their knowledge and/or pivoting to another field.


You can't cheat true knowledge. I use MIT open courseware. It's dry material that is painful and frustrating to learn; which means it works!


You make very good points. The simple fact is that claiming you can transition from being uneducated to educated in any field or in general in a few months watching youtube videos is absurd. People who claim such a thing is possible are claiming something on the scale of an educational space elevator.

There are however alternatives to traditional college that are effective. One example is EDeeU Education (https://edeeu.education). There you can study with people like Clemens Ley (https://edeeu.education/director/clemensley) an Oxford PhD in theoretical computer science and now blockchain entrepreneur. You work through a detailed curriculum over a number of years. It's not the same as traditional college, but for people who are working or have a family and might want more flexibility of schedule, it's a good thing to look at.


I don't think this can be reduced to being taught at a university.

A good analogy might be going to a gym: some people have the discipline to just work out at home on their own; others simply need the right environment to get into the right mindset.

Some people can perfectly teach themselves programming, but it requires both practice and individual research, aka. doing stuff and reading articles/books/papers. Others may just need the environment and guidance of a university to reach an optimal mindset for learning the right things.

And even among those who "learn" at a university, there's always those who think that all they need to do is attend classes and let the knowledge drip into them. Those people often go out being as incompetent as they went in, because they didn't spend any time improving themselves.

Ultimately, saying university is either pointless or a must for every person is missing the point. Some people are better off without it, others could hugely profit from it. The only absolutes are that university is the "safer" route, while self-teaching is, if it works out, the more direct one.


I think you're missing the point here.

Most college students don't even pick a major until their sophomore year.

Many "self-taught" developers went to college and took "pointless" philosophy classes, they just decided later in life they wanted to learn software development. Most people who attend bootcamps have college degrees, including many in other engineering disciplines.

College CS courses aren't necessarily designed to be practical; many are more theoretical and not really practical for day-to-day SWE jobs. OTOH, bootcamp curriculum is usually optimized for practical software development (e.g. React/JS). Most "good" developers become "good" on the job.


> College CS courses aren't necessarily designed to be practical; many are more theoretical and not really practical for day-to-day SWE jobs.

This is the mentality that I really dislike about these courses. How exactly do you get to decide if something is just "theoretical" and "not really practical"? Everything in CS was purely theoretical at one point.

It's easy to say "practical means stuff that is used in the industry", but I mean, I've been paid, by corporations, to do Haskell, F#, and even F* briefly, all of which have been described as "academic" languages, and if you want to be able to work on cool and interesting stuff, there's a high likelihood that you're going have to rely on the "theoretical" world.


The secret is to learn how to distill the useful parts of the theory into something useful in pratice

Then you can leave all these reactionary and narrow minded coders to their own devices, implementing suboptimal solutions.


I guess my question is if there's even such a thing as a "non self taught front end developer"?

No 4 year university will teach you React as part of a CS degree. Most probably won't even teach JavaScript. Point is, becoming a good developer is largely a self-taught discipline as is.


> No 4 year university will teach you React as part of a CS degree.

DISCLAIMER: I'm not a frontend developer.

They will teach you why React is used though, at least indirectly. A good professor will explain the virtues and drawbacks of immutability, and explain how it affects performance; with this understanding, it will help you choose whether or not React or another framework is more appropriate.

> Point is, becoming a good developer is largely a self-taught discipline as is.

It can be, but to write code that ends up performing well, you typically have to have some underlying understanding of the "guts" of the libraries you're using.

Dumb example, to find the smallest element of a list, I used to sort the list, and grab the first element out of it. This will work, but if I had taken any data structures or algorithms class, I would have learned that this is an O(n log n) process, whereas finding the min only requires O(n). This won't matter for smaller lists, but for something big it absolutely will.

Now, maybe I'm just dumb, I'm willing to accept that, but it's not like when I realized this later and changed to the faster version, that the code for finding the min was appreciably shorter or prettier or easier to maintain, it was only faster.


Dumb example but knowing why or when to Google something like how to find the smallest item in a list shouldn't necessitate a 4 year $50k+ degree


I knew just fine how to search for something and copypaste from Stackoverflow; I just didn't even realize that the solution that I immediately thought of was sub-optimal.

Sure, that example maybe shouldn't necessitate a $50k degree, but my point was more that the theory inherently informs the practice. Taking a theoretic discrete math class does make your software better, even if it doesn't immediately seem relevant because all the job postings are asking for 10+ years of React experience or something.


>No 4 year university will teach you React as part of a CS degree. Most probably won't even teach JavaScript.

You're conflicting computer science with being a developer. A CS degree isn't about learning how to program in the industry.


No, I'm in agreement with that view. I'm responding to OP's line "If you're learning to code just for fun, these things are totally fine and can be incredibly fun, but if you're learning to code for a job, please don't treat these things as an "alternative" to college."


A CS degree, especially at the undergraduate level, is mostly conceptual. It takes much experience to develop the intuition necessary to solve complex problems faced on the job.


>No 4 year university will teach you React as part of a CS degree. Most probably won't even teach JavaScript. Point is, becoming a good developer is largely a self-taught discipline as is.

I'll have React, GraphQL, .NET Core, EF Core, Dapper, MongoDB and RavenDB

cuz we're having some courses with an actual industry person with 15+ years of exp (no, it isnt private school).

Those courses are: Building applications based on HTTP / Non-relational Databases and Programming (lang + data access)


Brown's UI/UX course spends a small amount of time on React.


I don't get it. The self study is the easiest part. Nothing prevents you from starting to learn these things from age 12 and up. Not even the language barrier is an important consideration. The harder part is actually getting recognized by employers when you can't just supply them with a paper that shows them that you burned X amount of years on a certain topic which employers use as a form of spam prevention like the proof of work mechanism in bitcoin. So not only do you need to study as hard as a university student but after self study you will still have to work hard to get past the HR filters.


I'm with you, these are fine for learning to program for fun / hobby, but they don't constitute something as solid and foundamental as a proper 3-4 of consistent learning. Also general courses have a proper role to play in one's education, so that even if you're very specialized, you have general knowledge that inevitably comes handy in some situations in life. Moreover there is a certain well-roundedness, knowledge wise, that comes from such an education.

When you're on the other side of the table, interviewing candidate, it is as if you can spot them without even looking at their resume. They have a certain profile.


There is an assumption being made here, and that everyone learns in same or similar ways, making it necessary for this sort of content to slowly sink in.

While true, it is not a replacement for a 4 year college, not everyone learns the same way. For me, I can blow through an MIT course at an accelerated rate and retain most of it, but that's because I made a hobby out of meta-learning for a while and really got into effective ways to learn.


Blowing through most MIT courses is quite an achievement. Can you share any ways to learn that have been particularly effective?


Interesting. Could you elaborate further on how you do this, study techniques for “meta learning” and what you define by “blowing through”? Thanks


I've written about it a few times here, but unfortunately I haven't yet documented it in any great level of detail.

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

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


Thanks, I've been interested in meta learning since finding out how powerful SRS systems can be for foreign languages, but I've never seen much similar to what you've written about mental data structures etc. In comparison, I tried Coursera's Learning How to Learn but was so basic, almost something you already would had to have known to complete a college degree in a difficult subject. I'd be fascinated if you ever have a chance to write any more about the C++ 250 concepts etc.


I agree, there have been concerns about the lack of humanities courses in tech schools. College gives you a broad education, the opportunity to take courses in fields you want to dabble in, meet people from disparate backgrounds. It's hard to ever do that again in your life. The bootcamps are just serving the mad rush to get into tech. The courses - serve a purpose, you build on your fundamentals.


High school drop out turned software engineer here. I never had any success with these sort of programs. My advice is pick a hard problem (to you) and stick with it until you've solved it. Rinse and repeat. Eventually you will be pretty good at solving problems.


same background, but different advice: pick a problem you have and build a website that solves it. start with a trivial problem, then start adding javascript.


No need to limit yourself to websites. Embedded systems are fun too. Although I guess you could put a website on one of those too.


University doesn't teach you how to code. They delve into complex theory or math proofs.

You still need to learn to code on your own. These self taught systems do come in handy.


That's a generalization that maybe used to be true but probably never was. There are some good university programs today that I feel actually focus on learning how to program like the How to Design Programs curriculum.


I disagree with you in one regard, I think you are taking the position of a young person who hasn't had much education outside of high school.

Take a look at it from the perspective of a 30 or 40-something with some college or a degree in another domain looking to transition into CS. In this case, the fact that formal CS degrees are, I dare say, polluted, with irrelevant crap is a waste of time, money and brain power. For example, my son, who happens to be studying CS at a major university was forced to take a class on Marxism. The only word I can come-up to describe this is: Demented.

I would prefer to see a system where degree programs focus on the material necessary to support the degree and nothing else. They could, as an aside, offer a parallel track where the student could take additional non-degree classes for general culture. These classes should not have any effect whatsoever on the degree. To continue with the example, if my son failed or dropped out of the Marxism class (he did not, he passed it with full marks) it should have no bearing on his overall standing in the CS degree.

I also disagree with the concept of a fixed timescale being required in order to gain understanding of a topic. There's plenty of evidence in support of this. Companies complain that traditional CS grads don't know how to write code. Yet they spend four to six years in school getting BS or MS degrees.

Frankly, going back to my son, if it weren't for the fact that we work on a number of real-world projects together his coding skills based on schoolwork would likely be substandard. There's a difference between learning to CS to pass tests and applying it in real-world environments.

My argument might very well support the opposite conclusion: Get through schools as quickly as possible, one or two years for a BS in CS and go to work. Medicine has residency and internship as part of the process for that very reason.

I would much rather hire someone who devoted a couple of intense years learning and two years full time directly applying and honing the craft than someone who takes four years to study and comes to me with no experience other than, perhaps, a few summers as an intern here and there.


Karl Marx was notably a philosopher who wrote about the alienation of labor which resulted from a highly specialized capitalist economy. He saw that workers were increasingly separated from the things they produced, and that people who would have once tended for the flock, shorn the sheep, spun the whool, and wove it into clothing were instead spending 16 hours at a machine, isolated from the final creation. He thought this converted people in mere cogs in a machine rather than fully realized creative individuals.

If you think that universities should just teach students tools that they need for some specific job, perhaps you would benefit from a course in Marxism, even if many of his ideas are today known to be wrong.


I know quite a bit about Marxism and modern incarnations of his ideologies. Have you ever lived in a Socialist/Marxist society? The only people who think this ideology is good are those who have never lived within the grips of such evil. Well, I have, and I have friends who lived in the USSR who did as well. When anyone talks about Marxism and Socialism everyone shakes their heads in disbelief.

For a bit of context, research and read The Gulag Archipelago. If you are truly interested, here's a intro:

https://www.youtube.com/watch?v=w84uRYq0Uc8

BTW, as a matter of principle I never down-vote anyone on HN or elsewhere. I firmly believe in open discourse and free speech, which means I have to give particular care to opinions with which I might not agree. If you are getting down-votes, it isn't me. I have no problem whatsoever with anyone disagreeing with me so long as the exchange is respectful and intellectually honest.


What college was this that required a "course on Marxism" for a CS degree, and what was the course?


It would not be good form to post this.


Please explain why this wouldn't be good form? A University's course requirements are publicly available.

My guess is that an entire course on Marxism wasn't actually required, and it was either an elective or a much smaller part of a required course.


How would this be bad form? If this is from a "major university" like you claimed, and if Marxism is bad, isn't it good to tell us this university so we aren't blindsided by it when we enroll our kids in it?

It's not like you'd be posting forbidden knowledge; most universities publish their required curriculum.


I am not going to be baited into bashing specific people or universities. Feel free to arrive at whatever conclusion satisfies your thinking. I don’t care.


No one is trying to bait you into anything. But when you make an extraordinary claim, you need to provide some supporting evidence. Obviously you care whether or not people believe what you wrote to some extent, otherwise why did you take the time to write it at all?

Who do you think you're going to harm? The University doesn't think there's anything wrong with what they did, because I guarantee the course requirements are publicly available.


> No one is trying to bait you into anything

OK, I retract "baiting". Still not going to publish anything more.

> you need to provide some supporting evidence

I don't.

> Obviously you care whether or not people believe what you wrote to some extent

I do, but...

> Who do you think you're going to harm?

My son.

> I guarantee the course requirements are publicly available.

Likely true. However the dynamics that lead to having no option but to take such a class without any balancing context --within the class or through a second class-- can only be had by experiencing the journey.

I realize what I going to say is a personal perspective and as such it is deeply biased:

To me, as a classically trained entrepreneur, neutral student of history and descendant of genocide survivors, teaching a distorted benevolent version of Marxism to kids while not teaching any of the massive downfalls, pain, suffering and death the utterly failed ideology produced is equivalent to, as an atheist, forcing religious dogma to atheists. There is nothing wrong with learning about both Marxism and religion. We should absolutely teach them, but they should be taught without distortion and in the context of other relevant knowledge.

If the goal is to indoctrinate, you exclude everything outside of the preferred ideology. If, on the other hand, the objective is to educate, you present as much of the human experience as possible, without favor for one or the other, teach students to reason critically and let them be.

As I suggested in my other response, if you are interested in a perspective on what has been going on in academia and how it happened, please watch this interview with an Oxford/Stanford/Harvard professor who chose to expose some of these issues and paid the price for it:

https://www.youtube.com/watch?v=VKkNIOkGtnQ


>My son.

If you think that posting a comment on hacker news revealing that your son was forced to take a particular class that you disagree with is going to harm your son, you are being deeply paranoid.

>https://www.youtube.com/watch?v=VKkNIOkGtnQ

I went back to school to finish my CS degree about 5 years ago. I was a libertarian until a few years before that, and until a year ago I was in grad school.

I was also one of very few Bush voters in a liberal leaning History department during the start of the Iraq war.

I don't need to watch a Youtube video designed to scare conservative parents to understand what is going on in academia.

It is most certainly not common at American Universities to require CS students to take an entire class devoted to Marxism. That's why I asked for evidence because it is an extraordinary claim. And it sounds like a claim designed feed the conservative paranoia regarding college.


Please stop accusing people of that which you know nothing about. It is OK to disagree. To go from there to ascribe intent and motive is, well, unfair at best.


Sorry but if you show up on a public forum and start making deragotory statments about the university system as a whole, and then refuse to provide any supporting evidence to back up those claims, I'm going to question your motive.

You seem to have a serious axe to grind with college in general.


There you go, yet another conclusion about something you have absolutely no knowledge about.

I'll tell you what, the forum is yours. Conclude anything you want. Not my problem. Live long and prosper.


> There you go, yet another conclusion about something you have absolutely no knowledge about.

From your public comments this is my conclusion.

You have an axe to grind with academia, because you believe that academia is indoctrinating kids with Marxist philosophy. If that's not what you believe, feel free to retract your statements.


Yes, instead you're going to bash all universities without any evidence...the only conclusion I can draw here is that your intended purpose is to sew general distrust in academia...that or you just grabbed a story from some chain email and are rebranding it as your own.


None of that is true.

Have you considered the idea that speaking out could have negative consequences for my son, who still has a couple of years at that university?

They have already shown their cards in so many ways. One of my son's roommates during his first year (an 18 year old) both sold alcohol and drugs from their shared dorm room and consumed them in such amounts that it was common for him to vomit in his bed multiple times a week and generally be dysfunctional, much less study.

Both parents from the remaining two kids in the room brought this up to university authorities, including police. I physically went to meetings with them. The other parents did the same. We wrote countless letters. We wanted this kid to get help. He was here from another country, had no support system and was harming himself and others in incredible ways.

The university utterly ignored our requests. They told us the only option we had was for our kids to move to a different dorm room. Never mind the kid who was killing himself while dealing drugs and alcohol.

Fast forward to the end of the term, he takes a flying leap from the top of a flight of stairs and suffers serious physical damage. The university still does nothing, in fact, despite failing his courses they allow him to continue and enroll for the next term. He spends much of his time in bed, gains a tremendous amount of weight and his quality of life became unbearable. I'll stop the story at that point.

The university, did not care. We could have saved this kid's life. They had at least six people screaming at the top of their lungs for months when this problem started. They did nothing. And the kid paid the price. Well, I guess he was worth $60K per year, it must have been worth it.

This kind of thing --not this exact kind of thing-- goes on at many universities across the US. I am in touch with parents with kids in universities ranging from Berkeley to MIT. They all have stories of ideologically or financially (or both) wrongdoing. It's just the way it is.

For an interesting perspective, watch this interview with Niall Ferguson (the first half or so is relevant to this topic):

https://www.youtube.com/watch?v=VKkNIOkGtnQ


How was he forced to take a class on Marx? I have never seen that as a required course at any university.


That was the only class available for several terms that would satisfy the degree requirement. Interestingly enough, that was the only class that was available every term while the others were not.

Even more interesting, they never mentioned Aleksandr Solzhenitsyn and his work, The Gulag Archipelago. Everything was painted through rose colored glasses. Pretty disgusting. Thankfully we have a home where education is deemed important. My son had already read many of the classics before going through college and was well equipped to deal with an ideologically biased situation. He also read some of Gulag Archipelago and knew the history of that work.

I recommended he be practical about this class. He did the work, wrote a bullshit paper, got an A and then proceeded to vomit. No harm done.


> I think you are taking the position of a young person who hasn't had much education outside of high school.

I went to college for almost two years, and re-enrolled in college late last year doing night classes. I also worked as a research scientist at New York University for around a year (2015-2016), though this was admittedly more in the working world than the educational world. My wife is doing college full-time. This seems like a weirdly dismissive response to me.

> For example, my son, who happens to be studying CS at a major university was forced to take a class on Marxism

I have never heard of this outside of stuff like the Drudge Report or Fox News; before I dropped out of Florida State University, I never saw Marxism as one of the required classes, and I changed my major from CompSci, to Physics, to Mathematics. Maybe your school is different, but I have seriously never heard of "Marxism" being a required class in any university.

> To continue with the example, if my son failed or dropped out of the Marxism class (he did not, he passed it with full marks) it should have no bearing on his overall standing in the CS degree.

Did you not actually read the comment you are responding to? I said pretty unambiguously that the classes that seem "useless" often end up informing your perspective in different ways. That was literally the whole point, and it seems like you kind of missed it.

To go with your example, it's entirely possible that the Marxism class would give a higher understanding of political theory and philosophy. While your son may not want to be a politician, him having a decent grasp of philosophical reasoning is probably a good thing.

>I also disagree with the concept of a fixed timescale being required in order to gain understanding of a topic. There's plenty of evidence in support of this. Companies complain that traditional CS grads don't know how to write code. Yet they spend four to six years in school getting BS or MS degrees. > Frankly, going back to my son, if it weren't for the fact that we work on a number of real-world projects together his coding skills based on schoolwork would likely be substandard. There's a difference between learning to CS to pass tests and applying it in real-world environments.

I'm sorry if I didn't make this clear, but no one should go to college thinking that it is sufficient for being a decent engineer, just like having a skeleton is insufficient for having a body, or having an oven is sufficient for having dinner. There is a lot of self-learning you have to do.

College is about building fundamentals, and teaching you how to teach yourself.

> I would much rather hire someone who devoted a couple of intense years learning and two years full time directly applying and honing the craft than someone who takes four years to study and comes to me with no experience other than, perhaps, a few summers as an intern here and there.

And I'm glad people have this mentality...it's kept me employed, but when I've had to hire people, a vast majority of dropouts who work on experience (though not all) have a weak understanding of fundamentals, and while that's not a problem for some domains, it is a problem for mine.


> when I've had to hire people, a vast majority of dropouts who work on experience (though not all) have a weak understanding of fundamentals, and while that's not a problem for some domains, it is a problem for mine.

You are right. My statement was too simple. Experience is not enough. If someone spends 30 years doing the same thing without learning anything else they are not going to be a good hire for anything outside that box.

What matters is learning. That's what I look for. Does the person have a track record of constantly learning during the last ten years? What did they study? Did they try to get a handle on fundamentals? Did they stick to one thing, on domain, or did they learn and have experience in a range of domains? Did they enroll in any MOOC's? What were they? Can he or she speak about these topics with reasonable authority?

What I look for is an insight into who this person is as a professional. One of my typical questions is a short sequence: What are state machines? Give me an example of using a state machine? What's the difference between a Moore and Mealy state machine? Can you whiteboard examples of both?

I am not looking for the person to know the above with 100% accuracy and insight. I am trying to get to know the person and how they think. If, for example, they try to bullshit me, I learn something valuable. If, on the other hand, they say "look, I have never had to use state machines so I don't really know the subject but I understand they can be very powerful and useful and would love to have the opportunity to learn about them and apply the knowledge", well, that, to me, is far more valuable than them being able to parrot answers to my questions. Anyone can prep for an interview and ace it.

CS is an interesting field. When I started life as an EE designing and programming computers of my own design you used Assembler and maybe C and, if you were lucky, Forth. Virtually none of the things I do today existed when I went to school. And so comes the realization that, in my case, when it comes to CS, I am no different than a CS dropout. Virtually everything I do today I had to learn on my own. And that entailed a constant effort spanning thirty years that took me through CS theory, languages, frameworks, applications and new developments such as FPGA --which literally did not exist when I was in school.

Having navigated this journey I am forced to look at the person rather than the credentials. In fact, credentials very frequently lie about what the person is capable of. There are plenty of stories out there about major companies having trouble hiring recent grads because they don't know how to, well, do the work they need them to do.

Engineering in general is a domain that requires constant learning. Stagnate and you become irrelevant. CS can be particularly brutal in this domain.

So, no, it isn't about just experience but rather about what someone did during that time and what they chose to learn.


Wait, so you only want him to learn about successful political ideologies?


That is not what I said. No, of course not. But if you ONLY teach Marxism and NOTHING ELSE you are doing the world a huge disservice. Marxism and other ideologies should be taught. Definitely. And they should teach the good, the bad and the ugly. If you want to know what that means, read The Gulag Archipelago for perspective.

Education should not be about indoctrination. Sadly there's a lot of that going on. I am not some crazy right wing guy, not even close. I'm just sick of what our universities have turned into. Someone goes to school to study computer science and they are treated to a solid dose of rosy-glasses Marxism. Those who go into humanities are in for full-on indoctrination. This is a horrible disservice to humanity.

Again, someone please tell me where the intersection between Marxism and Computer Science exists. I've been in CS/Engineering for over 30 years and can't find it.

Why aren't kids reading the Greek philosophers? Plato's Republic is a BRILLIANT piece of work. Aristotle, Socrates. Move forward from that, read Descartes, Kant, Adams and others. So much to learn. So much perspective to acquire. But no, we force kids into immersion in some of the most destructive ideologies known to man. And for what?

Not go off on a tangent, but this is also what is happening now with the whole Climate Change mess. That poor girl from Sweden is being used in vile ways. One of the worst example of indoctrination I have seen in my life. The only thing I that comes to mind that is worse than that are kids indoctrinated into terrorism and hatred. What depths has society sunk to?

Before someone jumps on me. Yes, of course Climate Change is real. Nobody is saying it isn't. And yes, of course we added 100 ppm of CO2 in the last ~1000 years. The issue is, no, we are not all going to die in 12 years and, no, none of what they want to do will help anyone for tens of thousands of years. This is a mess and using children in pursuit of political objectives is a horrific ugly thing.


> Education should not be about indoctrination. Sadly there's a lot of that going on. I am not some crazy right wing guy, not even close. I'm just sick of what our universities have turned into. Someone goes to school to study computer science and they are treated to a solid dose of rosy-glasses Marxism. Those who go into humanities are in for full-on indoctrination. This is a horrible disservice to humanity.

I seriously don't know what university you're talking about. Florida State University's economics classes (which I was required to take) as of 2011 mostly talked about Milton Friedman's invisible hand and how communism doesn't work. I know it's the narrative on Fox News and chain emails that colleges have become this safe space for SJW snowflakes or whatever, but that really wasn't (and isn't) the case for me. I live in New York right now, and go to a New York public college, with New York typically regarded as a left-leaning state, and it's not like that filled my mathematics degree with a bunch of stuff about gender studies and race relations. My math degree is, unsurprisingly, still basically math.

> Why aren't kids reading the Greek philosophers? Plato's Republic is a BRILLIANT piece of work. Aristotle, Socrates. Move forward from that, read Descartes, Kant, Adams and others. So much to learn. So much perspective to acquire. But no, we force kids into immersion in some of the most destructive ideologies known to man. And for what?

My philosophy class in a public college actually went through all those philosophers, and in that order. The required philosophy class.

Your take on climate change is so ill-informed that I don't know that it needs a rebuttal.


> Your take on climate change is so ill-informed that I don't know that it needs a rebuttal.

You are wrong. I am more than willing to engage in a scientific, evidence-based conversation about this if you are willing to stay within those bounds. In fact, I should be able to prove the greater point by using just one graph, which is the data on ice core atmospheric sampling.

If you are willing to honestly look at the evidence and my conclusion I am equally willing to participate in a Q&A session to try to evaluate it.

There is NOTHING I would like more than someone showing me where my reasoning on this is wrong. I say this because the conclusion I have reached is not what I wanted. I wanted to learn that we could actually do something about this issue. I ended-up reaching the conclusion that the opposite is true.

Are you willing to help me evaluate my conclusion?

This offer is open to anyone reading this.


> You are wrong. I am more than willing to engage in a scientific, evidence-based conversation about this if you are willing to stay within those bounds.

Would those bounds include "not-bringing-up-climate-change-stuff-to-make-a-bizarre-point-about-some-16-year-old-activist on-a-post-that-has-absolutely-nothing-to-do-with-climate change-or-activism"? Because that seems like a pretty obvious bound to a normal person. Literally no one brought up climate change on this, you just wanted to make some bizarre point about...well I'm actually not sure, it kind of came out of left field.

> If you are willing to honestly look at the evidence and my conclusion I am equally willing to participate in a Q&A session to try to evaluate it.

It's not like the information is hard to find; why do these "climate skeptics" (or whatever you want to brand yourself) want to avoid doing any actual work? Back for like the two months that I called myself a "climate skeptic" around 9 years ago I did the same thing, and eventually I realized that I have access to Google like everyone else, and I have access to the findings by NASA like everyone else, and I can fairly easily find the papers like everyone else, that I really don't need some random schmuck on Hacker News to do my work for me, and after about an hour of research, looking through NASA's information, I changed my mind.

I suspect that instead you just want to be able to say afterward something like "I put myself into the marketplace of ideas and the global-warming activists wouldn't even accept me!!!!", presumably to put into a chain email or something like that.

You're an adult, you clearly know enough about the internet to do searches yourself, you don't need me (or anyone) to do it for you.


I don't really understand why you have to resorts to a personal attack. I'll ignore it.

I am not a climate change skeptic at all. Not even one bit. Skeptics are, to be kind, extremely ill-informed. And so are zealots. This thing has become so incredibly polarized that scientists are afraid to speak up and go against the grain in any way.

The reason I brought up Climate Change and the girl (who is a beautiful smart young woman and should be protected) is I was talking about indoctrination. What adults are doing to kids to further the extremist ideologies surrounding Climate Change is nothing less than child abuse, it's criminal. As a parent I am aghast that other parents allow their kids to be used this way. We have seen kids break down and cry in absolute fear at many of these demonstrations. This is very, very wrong. Again, I was talking about indoctrination and the most current example of how bad this can be just happened to be kids and Climate Change.

Here's my problem with what's going on out there. Two sides:

Skeptics: Well, they don't know what they are talking about and refuse to learn, research and understand. I can see a range of them not having the necessary background in math and science to be able to understand. I can't fault them for that, it's a combination of personal circumstances and the educational system. I don't know.

Zealots. Activists: They are being driven like sheep by forces for whom Climate Change has political value. They repeat what they are told without questioning and understanding any of it and share in the ignorance of the skeptics while existing at the other end of the scale.

In both cases the masses are being driven by a combination of fear-mongering and religious attachment to ideological camps.

Where is the truth then?

Climate change is very real.

We added about 100 ppm of CO2 to the atmosphere in just a few hundred years.

There is nothing whatsoever we can do to "take back" the 100 ppm in anything even remotely resembling a human time scale.

That last one is my conclusion based on looking at relevant, reliable and accurate scientific evidence and running through some very basic math. Understanding this aspect of the problem is very simple.

I realize this is a shocker of a conclusion but I feel it is important to understand that we have to be careful or we might just succeed at killing everything on this planet. Some of the proposals out there are down-right scary. There is no way we re going to reduce atmospheric CO2 by 100 ppm in 50 or 100 years. It will not happen. If someone claims they have a way to accomplish this they are going to collide head on with having to explain how it is that they are going to get around some of the most fundamental laws in science, such as the Law of Conservation of Energy.

Anyhow, if you (or anyone else) is interested in helping me understand if my conclusion is wrong I welcome it. I don't want to be right on this one, but I can't find a way to refute it. I have had conversations with other engineers and scientists, one of them being a PhD in Physics from JPL, and not one of them can find a hole in my reasoning.

Let's assume, for a moment, that I am correct in my conclusion. That we can't fix this for perhaps tens of thousands of years, if at all.

What would that mean?

Well, at a minimum it means we need to refocus the thinking and effort into research that will hopefully result in real short term improvements for humanity while understanding we are not going to fix the overall problem. We need to focus on the "brace for impact" reality. And we sure as hell should criminalize what's going on with kids, where teachers and others are actually convincing them they are going to die soon if nobody does a thing about Climate Change.

If I am right, the conversation needs to change quite radically. Politicians need to be ejected from this domain so that scientists can go to work on the reality of the problem without fear of losing their jobs, grants and careers. If I am right, and I hope I am not, we are wasting precious time stirring up a frenzy that could lead to truly terrible decisions.

I extend my offer again. If you, or anyone else, is willing to critically evaluate my findings I would thrilled. I am happy to start a new thread and present both data and argument. I repeat, I am actually looking for someone to tell me why and how this conclusion is invalid.

Thanks.


To avoid either of us being downvoted and to avoid this thread being giant, I'm happy enough to continue this conversation via email (in my profile).


While going 1 on 1 over email is interesting and useful it is also very time consuming. I've done a lot of this over the last several years. It served a purpose when I wasn't sure, as people with equal or stronger scientific backgrounds than me asked difficult questions.

I have been thinking about this for several weeks actually. My conclusion at this point is that it might be time to get off the sidelines and present this to a much wider audience. To that end I am organizing my journey, findings and conclusions into a paper. At the moment I am thinking of publishing it through the American Association for the Advancement of Science, of which I am a member. That part isn't set in stone though, there might be better options.

To be candid, one of the serious concerns I have is related to the just how vindictive and violent ideological mobs have become over the last decade or so. Going up against both climate change mobs (believers and skeptics) can have serious and permanent personal consequences for both individuals and their family. This is the real tragedy of our times and something that has turned this particular topic into what it is.

Saying anything against the mobs can make you radioactive, and life is over. I mean, just look at your reaction to a simple statement (not to single you out, I see this all the time). You have a set of conclusions that you are convinced to be correct and reject even as much as having a somewhat public conversation about the possibility these conclusions might be wrong. Now, you don't strike me as a vindictive violent zealot at all. However, those people are out there. Social media amplifies their voices and influence. That is precisely how they are able to cause tremendous damage to anyone who counters challenges the positions they have taken.

It reminds me of a recent case of the guy who raised around a million dollars to donate to children's hospitals. The mob didn't like him. They dug into his social media record and found a stupid thing he said when he was 16 years old. They pushed that hard all over the place. They then went to his sponsors and pounded them just as hard. The end result was that the sponsors pulled out their matching contribution and the entire effort was destroyed. Children's hospitals did not receive the much-needed funding because an angry mob attacked one person with such fervor and violence that they made it impossible for that to happen.

Climate Change is a hundred times, a million times, worse than this. The minute you have children marching on the streets all over the world you have to consider how personally dangerous it could be to speak up. Not because of the children, but rather due to the unavoidable fact that there are people and companies making millions, if not billions of dollars selling an ideology. If you screw with that you are dead, perhaps even literally.

I want to do the right thing, just not entirely sure how to go about doing so without the potential for great harm to those I love most.


It seems to me that one of the biggest advantages of having a CS degree from an actual institution is that prospective employers are far more likely to believe that you actually have the skills you say you do.

If you're self-taught, but have truly gone through something like OSSU (or [https://teachyourselfcs.com/](https://teachyourselfcs.com/), or any other set of courses that covers much of what a CS degree would), how do you convince employers that you actually know what you say you know? Sure, you can perform well in the interview, but first you have to make it that far.


Just an FYI for you. HN does not support Markdown, but does automatically make URLs into links. Unfortunately, its parser doesn't play well with Markdown syntax. Your link goes to the URL below:

    https://teachyourselfcs.com/](https://teachyourselfcs.com/)
Rather than to https://teachyourselfcs.com/


There are also lots of comments in this HN submission that assume if you have no CS degree then you simply do not know the concepts that are taught in a CS degree. If you do not have a CS degree then you will have to overcome this bias every single time.


I hate to be that person, but “Multivariate Calculus”, “Introduction to Probability” and “Introduction to Logic” cannot possibly be considered “advanced math” and “advanced theory” as this guide states. This is something every CS freshman learns in their first term.


If this is self taught then calculus shouldn't be core. It should be moved to advanced math and replaced by more linear algebra. Calculus is a beautiful course but linear algebra is central to data science and ai. Unless you're getting into topics that require it, 3 semesters of calculus will go unused. You can't know too much linear algebra and discrete math.


Linear Algebra is indeed essential - but Calculus as well. If you're talking about AI, then backpropagation would be the first thing that comes to my mind where Calculus is needed. On the other hand if you talk about data science, I would focus more on statistics and probability theory (again linear algebra and calculus are tools you will need)


There's really nothing in applied machine learning that requires calculus.

1. Usually you're not implementing training, you're most likely using a framework that does training for you while you set up NN structures and data flows.

2. If you are implementing specific training methods yourself, massaging loss functions, new regularization functions and various objectives, and you are explicitly implementing backpropagation, then you're not implementing differentiation yourself, you're most likely using some kind of autodiff library or framework that does that for you.

3. If you are actually doing something with ML that involves you doing calculus, congratulations, you're likely doing PhD research on the topic and yes, sure, you're expected to know calculus at that point. But it's not really necessary even at this stage, an intuitive understanding of the concepts is obviously useful, but much of actual applied ML academic research doesn't really use calculus directly, the methods obviously use calculus but it's used just like CUDA kernels are used - obviously necessary but as a very low level of abstraction that's handled by those who specialize in it and most others can just apply it because it just works and is good enough.

I mean, seriously, you can get good progress and published papers in computer vision or NLP or data analysis without ever needing to directly use calculus; most people doing that would obviously know calculus as it's a basic thing, but it's not really that relevant to the daily work, most likely none of the experiments you'll run will require you to solve any calculus problems.


always contentious :)

I think you need both, I know in my areas of measuring things and controlling things it is useful. Though I'd struggle to say how useful.

I think we can all nitpick any given course, but as it is, it seems reasonable, and I'm sure they will tweak it over time based on feedback from students

I think it's generally good. If you did all the course, you'd be in a good position to tackle a lot of programmnig problems.


This is great, but I was wondering if there is any similar, more text-based alternative? Videos are great, but I prefer text.


See jamestimmins post about https://teachyourselfcs.com it's a recommendation of textbooks to follow for self learning CS


I really like this list, but believe it's wrongly titled. I'm a nuclear engineer, who pretty much just writes modelling software all day. The software architecture stuff is something I've never been taught and always felt would be immensely valuable to learn. Some good resources for that on this list.

Also a request for any resources of scientists trying to get their head around how to write good software, we're all pretty much people who once read a C++ tutorial and just went with it.


> Also a request for any resources of scientists trying to get their head around how to write good software, we're all pretty much people who once read a C++ tutorial and just went with it.

I guess this is hard to find, because theres no generic way that will work for all programming languages and contexts.

But i will tell you where i often find them: directly in source code.

People that are really good at this, dont have time to teach, and if they teach, its hard to get to the point to teach the 'tricks' implemented directly in source code.

Also, im my experience, besides the generic algorithms and protocols that you can implement in any language, the rest is very much context dependent.

So in the context of C++, that you have mentioned, there are for instance, at least, two great C++ shops for great source code, experience and tricks that i particularly like: Google and Microsoft C++ stuff.

The problem with this approach, is that you have to be like a 'source code vulture', opening up the engines you are interested in, and willing to expend some time reading and understanding what the source code do.

With this you can match and map with the more abstract knowledge in the field.

I've learned A LOT reading others people source code, specially the 'canonical' pieces of software out there.

Something no book wandering over abstract ideas can taught you about (the first exception to this that comes to mind is Tanenbaum books about OS, but he made Minix as a source code realization of the ideas in the book, so...)


Also a request for any resources of scientists trying to get their head around how to write good software, we're all pretty much people who once read a C++ tutorial and just went with it.

That is an interesting question I had not thought of. I genuinely cannot think of a single resource that teaches good software engineering practices, like how to structure code in a robust and maintainable way. In fact, many books that I read usually include examples using terrible coding practices. And then the ones dedicated to software engineering are usually too out of date or academic (GoF, Fowler books).

I would say read up on inversion of control and dependency injection. And then a book on unit testing. Writing your APIs to use dependency injection and making them easily testable (by testing output not internal state) gets you most of the way there.


That is basically the mission statement of Software Carpentry (https://software-carpentry.org/). They have a _ton_ of great material for those in scientific computing wanting to improve their software engineering skills.


I've looked into software carpentry, I'm glad it's there but learning how to commit and 'intro to <python/R/unix>' is about five years behind what I need. Most scientists can read intro tutorials themselves. I'll keep looking around on their website though, thanks for sharing.


Have you given The Pragmatic Programmer a try? It's a great resource that draws parallels to practical examples on what to do and what not to do.

https://pragprog.com/book/tpp20/the-pragmatic-programmer-20t...


I am entirely self taught. I have a degree in History but didn't do any programming in college courses.

Everything I learned I learned from a non-structured source.

I talked my way into my first technical job, then talked my way into my next, and so on. Many people denied me during coding test or on resume screens.

But for the few employers who didn't, I thank them for taking a chance on me and it seems they're keeping me around because I deliver valuable code to end-users.


Did anyone tell you why you failed the coding test stages? I'm putting together a best practice checklist for coding tests, and I wondered if you'd noticed any common themes.


It's probably not very helpful but certain problems are just too hard for me or I've never seen them before :) I don't have a deep background in data structures and algorithms, so most of the jobs I get are more like for very small companies that just want a guy to stand a bunch of libraries on top of each other and make a cool crud app with a "modern" interface.

It's a very different experience from an org with 100 or more engineers. Good luck on your project!


I see some comments here along the lines of "Is this a good way to get educated in computer science?" or "Is this a good path into a career?" or "What are some good alternatives?"

Maybe the problem is that it's pretty hard to gauge how good education of any kind is. We have countries all over the globe doing things a bit differently, and we have public and private schools with different methodologies. But, while I personally don't have the answers, and obviously our governments probably aren't sure either, clearly there is work being done in figuring out what works and what doesn't.

What are some good resources for identifying the best forms of education?

Are there any resources for identifying the best way(s) to learn computer science, or entry-level computer programming, or foundational software engineering?


Browsing throughout those courses I found out that more then 50% of them require you to either sign in with FB or Google in order to access them, so no thank you. Remember, if something is free then you're the product.


it doesn't always have to be nefarious.

By having a FB/Google sign in a website won't have to deal with implementing login, registration, email verification, forgotten passwords, etc.

Oh and even better; if they get hacked then all the hackers will be left with are hashed FB/Google IDs.


That saying applies more to stuff like gmail (free actual value but paid for with info) than the need to sign in.


Make a fake google/facebook account.


You can create a new throwaway account if you're worried about it.


how much did you pay to use HN?


> assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus

Does anyone have good resources for someone who would like to brush up on these subjects?


The best source I've found for reviewing these is Khan Academy. Their courses are more thorough and accurate than most high schools teach them, and they have all subjects you list.


While it isn't directly related to the topic of the thread, is the Imposter's Handbook a suitable purchase for someone who didn't major in CS in college to "catch up"? I had two intro to CS courses during my undergrad and took several night courses while employed at my first job and did get a tech-facing career, but once I got that job I haven't had the energy to go back and tackle things like Data Structures and the maths I have to take all with the pressure of a grade.


I went back to college after having worked as a developer for a few years, which helped me focus on what mattered. That book looks like a good overview of many important CS topics.

I recommend the following topics (in roughly this order):

- Data structures

- Sorting algorithms

- Search algorithms

- Algorithmic complexity analysis (Big O) - Important

- Databases

And these topics that aren't in the book:

- Set theory

- Networking

- Security

- Encryption (learn what to do and what not to do)

My take on the rest of the book:

- The history of computing is interesting but not necessary to learn (plus there's a lot more than what's in that book)

- Software design patterns and principles are nice to know, but they're only useful when you're in a position to design the software (not likely for an entry-level job)

- Study functional programming before trying to learn lambda calculus, unless you like abstract math (guessing you don't)

- Learning how compilers work is not necessary unless you're working on a compiler or writing much low-level code (sounds like you're not)

- Testing is good to know, but it's not really that hard to figure out how to do

- Unix basics can be useful, depends on your situation


You could also get a free Udacity account and watch the Georgia Tech CS Master classes (OMSCS). Algorithms, Machine Learning, Operating Systems, etc. It's a good program.



Personally I think this is great but I would spend less time on certain things and more time on others.

I think what people who are trying to train themselves for programming jobs need most is topics in software engineering. And in particular I have my own view of the most important parts of software engineering.

So I would put more emphasis on modern tooling, practical requirements analysis, hammer home the importance of iteration and closed feedback loops such as end-to-end testing and observing/interacting with users. Emphasize iterative requirements analysis and verification -- it's very easy to get on to the wrong path early on in a project and waste a lot of time. And for most projects the programmer is the person who is best equipped to really understand and steer requirements and this means they need to be assertive which is quite a challenging aspect that requires practice.

Also modules and components can be critical so they need to get beyond objects or functions to that level. And also they need to understand and have experience with package managers and registries. These are examples where things have changed over the years. In the past it might have been more important to, for example, have experience with assembly language, or something. But these days, for building new software or integrating existing, selecting and combining components is critical to leverage the massive amount of available code and systems and avoid reinventing the wheel. People disparage that as "glue" or "plumbing" etc. but it is a high-level skill that needs to be developed and I think in most cases a much more advanced approach than building everything from scratch. Also it takes practice to know which parts should be components and which parts should be custom.


I’m glade that this exists and it looked interesting for me at first glance but it’s just too detailed. Wouldn’t mind brushing up my theory but learning about CMOS isn’t what I had in mind

I guess I’m not the target audience, which is fine



why doesnt this exist for any other field? you never hear of a DIY mathematician or economist...further proves that tech is a trade not a profession


All it means is that the software engineering sector is more open to applicants with varying backgrounds. This shouldn't come as a surprise, given how relatively young and innovative the tech industry is.

There's nothing stopping someone from getting textbooks and learning the fundamentals to be a mathematician or economist, what stops that from getting them a job is the industry not being open to that.

The differentiator between "trade" and "profession" has traditionally been physical work vs intellectual work, not how tightly controlled the training is. For someone to describe something as complex as machine learning or building Netflix's backend as "a trade not a profession" is just absolutely absurd.


It also depends on the culture of teaching. In econ and, to a certain extent, in comp sci the stuff occurring within universities is very different from what students of those subjects do when they leave.

And, imo, this is actually due to the popularity of the underlying subject. Both econ and comp sci are popular because of what you can do when you leave uni but this means more funding for those inside uni. This funding seems to go into producing more arcane research and increasing the complexity of the subject (not knowledge, just complexity).

Mathematics doesn't do this. The practical and the abstract are clearly demarcated. If you are studying to go onto research, there are usually specific courses. If you just need to know calc, there are different ones.

It isn't healthy when this distinction isn't clear. Economics has suffered massively from being very abstract. Comp sci is probably going the same way. And I think in both cases more effort needs to go into making the knowledge more accessible.


The days where the word profession meant anything are long gone.

Everyone is a professional these days.


Here in Germany we have the different IT trades you can learn on the job in combination with trade school (or the latter exclusively), as well as university level CS courses people can pursue after high school. Some people decide to do both.

Having hired and having close friends from both backgrounds, there's a vast difference in how both groups (on average of course, there's exceptions to everything) approach problems that crop up in the day to day job to the point that I'd call them almost incomparable. Note that I'm not talking about the stereotypical "there's enough bootcamp devs in the world already" type of difference, it's just that within almost the same time span (at least in the case of a bachelor's degree) both get completely different experiences that make them better at those specific aspects of the overall profession.



Ramanujan was a "DIY" mathematician. It's just that the barriers to entry are relatively low for tech.

But sure, suppose it's a "trade", so what?


Does anyone have a similar resource for applied math?

I am looking for something that goes beyond the standard calculus, linear algebra and stats material. For example, optimization, numerical analysis, stochastic processes, dynamical systems etc.


The first thing that came to mind (maybe due to mentioning stochastic) is MITx's https://micromasters.mit.edu/ds/ Masters in Data Science. It's statistics, but 102. (Of the alternative MIT 6.0002, which is MIT's intro to DS stat class.)

I take it you've done Discrete Mathematics and have enjoyed it? If you haven't, I highly recommend going that direction first, as imho it is the most beneficial math class a programmer can take in college.


Yes, I did Discrete Math long ago and enjoyed it.

Thanks for the link! Though it looks too basic for me, I was hoping for something on the more advanced topics I mentioned.



This is very interesting. Is this an online Masters or is it a free program?


There’s wikiversity - https://en.wikiversity.org on all of different topics.

And several others are trying to create mind maps.

But would be great to have a resource like OSSCSU or TeachYourSelfCS for X...

At least for the “main” subjects like Maths, Stats, Chem, Bio, Physics and Humanities - Econ, Anthro, Pschy, Pol Sci, Law, Sociology.


I'm one of the core OSSU team members. Unfortunately I'm not aware of any such resource, but I'm really interested in finding someone who can build an OSSU/Math curriculum!


Stephen Strogatz's lectures are good for dynamical systems.

https://youtu.be/ycJEoqmQvwg


Given there is variation of skill at anything, there will be variation of skill at self-teaching. Not all self-teaching is created equal. If you’re not good at self-teaching, then you get a bad teacher every single time.

Colleges diversify this risk. A few teachers might be bad, a few will have their back to the gigantic lecture hall the whole time, etc. But averaged over all your classes, most of them are actually pretty good, and many TAs, tutoring center employees, classmates, etc., can help a ton. Plus you’ll practice and improve self-teaching the whole time.

Like it or not, college can command a high price for this standardization and diversification of teaching quality risk. It confers a status credential.

Meanwhile, if I see you are self-taught in a complex engineering discipline, so what? If you also have job experience already to back it up, then ok. If you’re asking me to be the first one to take a gamble on whether your particular instance of self-teaching led you to sufficient competency, no thanks, I don’t have time to take that risk.


If the self-taught candidate can pass an interview screen at the same level of a new grad, then how does hiring the former become more riskier than the latter?


Passing trivia interview screens is useless, can’t tell you anything useful. You have to dig recursively into technical details about past experience or projects, and for university new grads this would be their education work. What will the self-taught candidate do at this point?


> What will the self-taught candidate do at this point?

Generally self taught people will have built something. I'd generally consider that the definition of self taught and would not include people that have only done self directed learning.


That would be fine, but I think it’s weird that you’re trying to make the phrase “self-taught” stretch to include also building something. I think it’s far more common for people to believe taking a self-directed online course and getting a certificate entitles them to equal consideration for a job as someone who put in 4 years of a structured university program.


Maybe I'm out of touch with how it's used today, but self taught used to be someone that built things, W3schools was the closest thing to online courses years ago. If so I'd argue the modern usage is wrong though, a self taught mechanic is someone that tinkers with cars, a self taught electrician is someone there own cables, a self taught sysadmin typically fell into the role by doing stuff, a self taught investor has invested money. So I see know reason why a self taught developer shouldn't be someone that's built software.


I would hope they demonstrated competency for the position. I'm sure there are other avenues other than education work that hold the same weight.


If you can't tell whether someone else is skilled or not, you aren't competent enough to be making decisions.


Well, asking CS trivia isn’t going to tell you they have skills to do the job. What do you propose?

In my decade+ of experience building engineering teams, the only useful signal has been probing technical details of education and past work experience.

If a candidate has neither, they simply cannot emit any signal you could possibly use to decide if they can do the job. Quizzing them on sorting algorithms or devops buzzwords is not going to tell you anything.


...where did I suggest that you should be quizzing people on trivia?

If you need to work out whether someone can do something, ask them to do it. Talk to them about things they have done as a first step. Don't overthink it.

Where I am, no-one asks DS&A questions. Managers still manage to fuck it up by focusing too much on inane questions - a propensity which seems to be inherent to human existence - and discounting just sitting down, asking someone to do something, and then getting them to explain why they did it that way.


> “If you need to work out whether someone can do something, ask them to do it. Talk to them about things they have done as a first step. Don't overthink it.”

I agree very much. It’s why I would be substantially less likely to hire someone for a software engineering job if they don’t either have (a) a somewhat standard bachelor’s degree in a related discipline and communicate clearly about knowledge gained through coursework or (b) previous work experience already delivering software engineering solutions.

If instead they have self-taught academic certification and no professional software experience, it’s too unlikely they can do the job when I ask them about doing it, regardless of their ability to talk about CS topics traditionally associated with tech interviewing.


I'm not sure this is meaningful as a path to employment in the US if you don't actually get a degree at the end.

I've gotten calls from at least five recruiters this week alone all excited to have finally found someone who's at least done some C only to realize that I haven't finished the community service hours for my degree (I've done all the classes but the university won't officially confer the degree until I've finished this, that's made my summer pretty complicated which has actually made it a lot harder than it needs to be, thankfully I'll be done in a couple weeks.)

What you actually know only matters once you're hired (at least for your first couple jobs.)

But it is always good to be learning new things and if that's why you're doing this than good! I've been teaching myself violin and I can definitely appreciate classical music more because of it, I absolutely don't expect it to get me a job.




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

Search: