Hacker News new | past | comments | ask | show | jobs | submit | page 2 login
No CS Degree – Interviews with self-taught developers (nocsdegree.com)
692 points by Pete-Codes 60 days ago | hide | past | web | favorite | 461 comments

There's clearly strong feelings in this thread. Whether or not a degree is necessary, I think we can say there's two groups:

- People who went to university, going through significant effort for their degree, and want to defend that choice

- People who _didnt_ go to school, perhaps suffering from a touch of imposter syndrome, who want to hide their insecurity

I'm a 20yr old "self-taught" dev. I'm considering going back to school this year. But its a tough choice. Things are going very well for me in the professional world so far. I was in a CS undergrad program for a year but didn't feel like I was learning as well as I was on my own, to be honest.

What I think I can say with confidence is theres not much point in arguing about this. If you want to go then go. If not, don't. Why do we have to prescribe a gospel on this? Let people decide what they want to do. Part of why "self-taught" devs like myself often suffer from insecurity is people shouting the absolute necessity of a degree. I don't see it.

I went to school for CS after 10 years as a self-taught profession dev. The main value I derived from it was the experience. Specifically, learning how to meet new people. Being a shy person by nature, I forced myself to make two new friends in every class, and it worked really, really well and it's something that I probably could not replicate outside of a similar environment.

Additionally, I legitimately enjoyed the coursework and learning about high(ish)-level math, art, and engineering that I may otherwise not have. It also gave me free time to pursue fitness and personal projects.

I'm probably not a better programmer as a result. And I'm probably not wealthier either, as I failed to leverage my degree into a position in Big Tech, though as a middling developer, it does make it easier to find jobs. But I do think I'm a better, happier, healthier person, and I would do it again.

The parent is exactly how I feel about my degree also. I didn't go back to school, I went to uni right on the "normal" schedule.

The discussion today seems to be all about the logic of it (how will you know what's in a uni degree unless you go?) That was the logic that convinced me to go. It wasn't until I graduated that I could say, with confidence, none of the classes contained anything I didn't already know.

(Yes, yes, including the theory classes.)

But the parent is exactly right: going to uni is a complex decision with multiple independent axes to evaluate: will you make more money over your lifetime (probably not)? Will you get that job you want (probably not, it's more down to people skills)? What will you do with your spare time while in uni (you will have some spare time)? What will you do with the opportunities to meet people?

Then there's what uni you want to attend. How you plan to pay for it. Whether you want to live in a dorm, live with your parents, or go online.

> There's clearly strong feelings in this thread.

It's always like this when it comes up, which is fairly often here, and I think you're right to point this out. It's an emotionally loaded topic, which means it's a hard one to actually get useful data from.

I think there's a couple of things going on here:

The path someone takes to get where they are is a huge part of their identity. So when they look back on their own history, they want to feel that that path is a good, valuable one because it implies that they are valuable people. So everyone who doesn't have a degree has an incentive to feel it's not important. Likewise, everyone who has a degree wants to feel it is.

The thing is, they're both right. There are many many paths and almost all of them are worthwhile human experiences. Many of them even lead to being a good software engineer. (And of those that don't, they still often lead to being a valuable human in other, often more important ways.)

But the reason it's useful to write about this stuff is for people that are looking ahead and trying to choose a path. Those people want to know the odds of each path and how likely it is to work out for them. Unfortunately, a long list of anecdotes is really hard to synthesize into that. It's like trying to figure out where to eat dinner when every single restaurant review is five stars.

I don't have good data either, but if you're trying to pick your path, I would think about your personality and how that's likely to interact with your choice:

Not going to school gives you more freedom to explore your interests and choose a unique, idiosyncratic path. If you are driven and focused, you can get farther down a road than most others will because you have the freedom to focus on areas where you are passionate. If you want to stand out, it's easier to do so this way.

At the same time, if you aren't self-directed and passionate, you can end up meandering and going nowhere. No one will tell you what to do and it's easy to end up doing nothing, or just dabbling a little in a million things. All of the onus to create structure and discipline is on you.

School will give you a structured environment to learn in. It gives you a curriculum crafted by experts so you will be introduced to topics in a reasonable order and you'll be shown things you might not have realized are important. You'll also absorb much of the culture and tribal knowledge of the field. However, this is skewed towards academia, and if your goal is ultimately industry, this may not be pure win.

Personally, I think going to school is generally a good, safe bet. You'll learn a lot, have a good experience, and meet a lot of people. You'll take a bunch of non-CS classes that will round you out as a human. Even though I dropped out, I got a ton out of my limited college experience, mostly not related to programming.

Not getting a degree is a higher variance path. You may blaze a trail and end up somewhere exciting and unique. You could be the next Bill Gates or Steve Jobs. Or you could end up flipping burgers, or underpaid because you're at a company that values degrees.

This is the best answer I've seen.

Not going to school gives you more freedom to explore your interests and choose a unique, idiosyncratic path. If you are driven and focused, you can get farther down a road than most others will because you have the freedom to focus on areas where you are passionate.

This is me, but I know this is not for everyone. I would advise going to school to make it easier in the long run. Passion for your work and the focus to pursue it is very important to get somewhere.

If school worked like it does today, 20 years ago, then maybe I could've finished it.

Appreciate your perspective on this. Thanks :)

I'm learning to code at the moment (Python this summer after learning the basics.)

I kept talking to developers online to find out about their backgrounds as I don't have a CS degree. I figured as I was already asking people how they learned to code I might as well write up some proper interviews and share them with other people. This way I can scratch my own itch and stay motivated as well as sharing motivation with other people.

You can check out my traffic/revenue at my open page which I have started from day one instead of waiting until big numbers www.nocsdegree.com/open

Thanks for this. I began programming when I was 8 on a Sinclair ZX Spectrum 48K from books I liberated from my Mom back in 1983. I grew up as the internet was just becoming a thing, communicating with other would be developers and hackers on IRC channels. I still haven't lost the bug. I'd like to say my CS degree studies were useful, but they were hopelessly inadequate and so constrained and tedious as to kill any further interest in formal education. I ended up dropping out and continued to learn informally and build a successful career over the next 23 years.

It's inspiring to read about developers who are also informally educated. It brings a sense that people like us are more common than we think and that we're really not alone. They're also finding great success despite the prevailing wisdom that you can't make it without a degree. People like that are proof that you can.

Well, I started on ZX-80 at school then did a CS degree which I didn't really get at first so I struggled in the first year - but in subsequent years I came to really enjoy the more abstract and maths oriented parts of the course.

I don't know where the idea that a CS course is a good practical training for a career in development came from - I'm pretty glad the course I did included almost nothing that was attempting to "train" you and focused mostly on the absolute conceptual fundamentals (from the electrical engineering side through general engineering maths to specialised CS subjects) as well as letting us loose to actually build stuff with minimal supervision but careful evaluation.

[The thing that really got my attention was the lambda calculus course where the lecturer mentioned the S & K combinators, of course the same course covered the Y-combinator!]

Thanks! Really glad you like it! Definitely a fun thing for me to be working on.

I had a ZX Spectrum but unfortunately just used it to play Fantasy World Dizzy.

I'll be interested to see what variety of stories and individuals you interview. I know learning to code today is far different than it was 25 years ago. It would be cool to see the stories on a timeline once you have more.

Thanks! I will be making sure to interviews a range of people doing different things with code so it stays interesting.

"This 22 year old self-taught PHP developer earns $15k a month and lives in an Austrian farmhouse"

I mean, f*cking seriously?

Yeah, that's harsh, but such a headline's an insult to those with a CS degree and serious self-taught developers alike.

To those who made this stay on the front page: given you're competent, you already make the same or more money as those with a CS degree, even if you might know less about the fundamentals, get over it! Upvoting cruft like this isn't going to vindicate your choice.

1) You're allowed to curse on the internet. HN doesn't have a content filter. Saying "f*cking" reduces the impact the curse is supposed to have. If you feel it's appropriate to curse then just fucking do it.

2) Not everyone does well in a formal school environment. This site shows people that self-taught can still earn good money.

3) Even if a CS degree would increase the Austrian's earnings, how much would it increase it by? Would it offset the cost of the education? Would it offset the wages earned during the years he was in school?

4) People don't always upvote something to the front page because they agree with it. Sometimes people do it to encourage discussion around a topic.

regarding 2 and 3. My complaint isn't about having or not having a CS degree, I didn't even get that far.

It's about the Taboola-like quality of the headline. They're an insult to one's intelligence. If I want to be insulted on the Internet, I'd go elsewhere.

Which part is insulting? That he's young? That he's writing PHP or he makes a shitload of money? I'm envious, I admit it, but I don't find it insulting.

Regarding 2, I'd like to point out this is both 100% true and somewhat misleading. You certainly can be successful with no degree, but I think anyone without one will tell you it's a significantly more difficult path than a CS grad takes. If you are driven enough to pass some of the most difficult interviews in the industry, I'd argue you probably could have done well in a formal school environment, since the interviews are largely borrowed from it.

Not all interviews are for the biggest corporations. Many do well with freelance or medium sized companies. Those interviews are nowhere as intense.

Recursion and Abstraction, like love and herpes, are a form of disease which once caught cannot be lost, but can be shed, and so spread. Your brain is wired to look for both opportunistically, in any problem.

What a CS degree does, is teach you how to apply the infection. Some CS degrees are like innoculation against them and you come out with a degree, but no grasp of the fundamentals. Others, you learn so much you become a vector of the disease.

Of course, it's also possible to over-apply, which I see every bit as often as copy-pasta.

recursion overrated imo.

I disagree. To consider something overrated, its value has to be little in comparison to the effort to learn it.

For some problems, recursion is vastly superior e.g. for recursive data structure like trees. And coincidentally, often those structures are much better at delivering high-performance solutions than their naive loop-based counterparts.

Granted, it isn't easy to learn, but also not that hard. Overall, I think the gains easily outweigh the effort. And it is not like I am writing recursions all day long. Most of the time I write loops, but you should know when using recursions is the better way to go and for those times you should know how to handle them.

Note that using function-call based recursion is a programming mistake in most common programming languages, as they have a fixed sized stack.

This includes many "functional" languages like Scala. Even Haskell had a default stack size limit until some years ago, and many Haskell based parsers crashed on large inputs due to that.

If you write programs that are supposed to process arbitrarily large inputs, you cannot use function call recursion in most cases.

(Of course this says nothing about recursion as a concept, which is fundamental and unavoidable unless you're programming, say, a traffic light.)

> recursion is overrated imo

Right up until the point where you have to traverse a nested data structure.

Recursive algorithms are a natural fit for recursive data structures. Recursive Fibonacci is contrived. </cliche>

iteration gets repetitive.

recursion is full of itself, though.

iteration gets more repetitive.

I have no CS degree, and I've been in the industry in various forms since the mid-90s, software developer full time since about 2001 or so. I have no CS degree because I just did not have the math grades to get entrance to university.

I've been working at Google as software engineer for 7.5 years now.

I guess you could say this is success, but I would not recommend this path; even after 20 years, there's hiring managers or recruiters that won't look at me, and coworkers whose behavior changes when they find out. Impostor syndrome can be an issue.

At my age with family mortgage kids, it's too late and pointless to go back and re-do all the HS math etc. I'd need to get into a CS program. But I do wish I'd done this. It took me a long time to elbow my way to where I am now.

> there's hiring managers or recruiters that won't look at me, and coworkers whose behavior changes when they find out.

I am very surprised to hear you say this. My background appears to be similar to yours (no CS degree, programming full-time since the mid-90s), and although I did see some resistance in job interviews for about the first 5 years of my career, once I had enough experience under my belt nobody cared what my education was. I've never encountered the type of elitism you describe. Maybe it's a Google thing?

I've had a similar experience to other poster, but relative to tech stack.

I learned .NET and Javascript early in my career. Every single job interview I had at a .NET shop brought up my lack of a college degree as a possible barrier to "handling" or being "good enough" for the position (their words). Not a single one of these companies invited me back for another interview.

Never had the same problem with JS, and now I happily work as senior-level engineer (using Python and Javascript) while encouraging other more junior engineers to take up and pursue the JS ecosystem.

U.S. East Coast.

It might be a Canadian thing, too.

I've never encountered anything like that (or maybe didn't read the signals?), if anything people are usually impressed by the fact that I'm self taught if they knew me beforehand. I've never felt like it's held me back in my career, but I do feel the lack of some of the math background sometimes.

If I had a gray beard... 30+ years as working dev.

I've never taken a 'computer class' while in school, although I've taken some instruction while working.

Entirely self-taught. I do this because I like it. Back in the day, I never played video games, I taught myself, and wrote, code. To this day, I don't play video games.

It's been my experience that hiring degreed CS graduates may not be the best course. Theirs a big difference between being 'book-smart' and real world smart. I tend to give preference to guys who write code for fun over those who are in it for the money.

Case in point, we just brought on a high-school student who is about to start his comp-sci degree. He has written code for years for fun. He's just rocking it. I'm sure he'll be invited back each summer until his degree is complete and will likely be offered continued employment after.

If that works for you, then great, but you’re locking yourself out of an entire world of software professionals who only code for work. I suspect those who don’t code outside work outnumber those who do.

> [...] outnumber those who do.

If their understanding that amateurs make for better hires than professionals is correct, then amateurs being the minority makes an even stronger case for filtering.

I agree 100%. I used to code all the time, prior to my CS degree, in High School, etc. But now I'm a professional programmer. I don't code outside of work, because coding is what I already do 4-6 hours a day. Now that it's my job, I've taken to other hobbies (and raising a family). I love what I do, but I don't live for it.

I've written code for fun since I first taught myself how to do it. After decades of work, I still do it for fun.

Which is fine. But that doesn't mean you should be favored in an interview and it certainly doesn't mean you're a better programmer than I am. My point was: favoring people that code for fun is just as bad as favoring people who only received formal degrees.

I didn't get that "point" from your post. I was just trying to assert the oft-ignored type of person (I am not an aberration) that still likes coding, after a lifetime. Even when I am inevitably confined to a hospital bed, I will code in my head.

That's cool! Extra inspiration for myself as well. I think it's good to bust the myth you have to love video games, or start coding aged 4 etc.

I think the biggest difference between successful devs and unsuccessful ones is the hunger for constant learning and improvement. You can lack that hunger if you have a CS degree or not. I've observed this at my company and others I've worked for as an almost constant.

yes, completely agree with this. To be successful, it has to be your hobby and you have to be hungry to know more and improve. It is also required anyway because CS and technologies changes rapidly. For example it is not common to write UI apps in Tcl anymore. :) but it is now more common to use LXC and Docker instead of virtual machines and shared library versioning hedeaches.

I have a CS degree, and while I agree with the general idea that you don't need a CS degree to be a successful programmer I'd say the biggest barrier to entry is in the start of your career - both getting a job and keeping that job.

I've worked with loads of self-taught developers, mostly from tech/coding bootcamps, and I've seen a lot of people burn themselves out due to a number of factors:

1. Bootcamps are hard, but suddenly these developers find themselves in a harder environment where 12 weeks of coding experience might not be enough to get them out of a problem.

2. Bootcamps cost a lot of time/money, without the option for a student loan, so many people put themselves into debt to switch careers, and that added pressure is a lot for people - especially when they've been sold a lucrative career and find that a company has hired them because they are cheap.

The CS knowledge aspect is largely irrelevant, because many developers can get by quite happily without ever using a linked list or priority queue, or knowing anything about quicksort, merge sort, etc. For most projects where you need to merge k sorted arrays, concatenating them and running the standard language sort function is good enough.

IMO, the problem has never been one of skill, because many industries have developed skills on-the-job or with time spent in industry. Where a CS degree comes in handy is in giving a student a structured approach to learning over a respectable amount of time, and offering a step above the entry-level barrier of entry.

While we are on the subject, if you are looking to self learn CS can anybody comment on the quality of this program? https://github.com/ossu/computer-science

fringe opinion. video courses in non-visual topics are a complete waste of time, made because the masses can't read and are lazy. there is a corresponding book better than the course available for everything listed. good books will have good exercises and solutions available.

video courses just won't teach as much. very easy to find best book available for each subject. even going partway through a book will offer more. can skip topics, look at syllabuses for classes offered in higher education that use said book if you want to know what to skip (many syllabuses available online).

for example, instead of taking the operating systems class you can simply actually read either of the two books suggested by this very page.

Came for interviews with self taught people who are now full time developers.

Found interviews with self taught people who hacked together websites and built businesses.

Admirable but misleading. Suggested title: “No CS Degree required - interviews with entrepreneurs who learned to hack code”

I'm turning 30 this year, a professional accountant and started out as a hobbyist, but work in data engineering consultancy as middle management, leading efforts into getting our team to adopt Rust of all languages.

I've found being willing to learn more to help me out, my breadth of knowledge is good enough that in many languages and concepts, I can hold my own against CS graduates.

I think knowing what you don't know is important, because you get incentivized to expand your knowledge. I'm currently studying Maths and Stats, because they're a good base for data science, and where I want to go in my life out of corporate.

The value that I bring to the table is no longer fluency in about 7 languages and a skill to learn more quickly (I've done obscure things like reverse engineering 'complex' accounting rules written in COBOL). What I bring to the table is the ability to solve problems using my financial expertise and technology.

So if anyone's reading this, don't be intimidated by "coding". I see writing software as a natural extension of what's on my mind, using what I understand technology to enable me. So, stretch your mind, it's a very powerful thing. Have faith in yourself, and do great like the people on No CS Degree

In the very early days (60's-80's) when the needs for programming outweighed the supply... Most programmers were being cross trained from other professional disciplines, such as accounting.

Not sure if you would consider a two year associate degree in computer technologies as a CS degree because pretty much what I recall from my studies, we were working on understanding the computer parts and components, doing some typing (data entry exercises) and understanding what software and productivity suites are. We did embark on some nifty console programming and writing batch files, but never fully immersing into the bits and pieces of what makes up software (algorithms, binary, lists, etc).

I work professionally as a software developer for quite a while, and what I have seen in the industry is that you gain more merit when you are able to ship product(s) that people will use (or perhaps automate a process that was previously done in a manual manner).

Yes, you can get past the initial gates of hiring qualifications (such as having a CS degree certificate) as well as the coding tests that lots of companies use as a gauge to test your technical capabilities. But no amount of CS degree or certificate would be enough to patch for example when you are dealing with real world software issues.

I wrote a lot of software before I ever took a CS class in college. The only things you'll get from a CS degree are the ability to prove problems are NP-Complete, learn how to do Dynamic Programming, reductions from one problem to another, Linear Programming, Graph Theory, and a bunch of other math tricks (random hashing, fast modular exponentiation, The Gauss multiplication trick, etc.). You don't need any of that to write a Chrome Extension.

If you need software to scale to hundreds of millions of users, then you probably need people who have CS degrees to think about your hard problems and how best to optimize them and which ones have no polynomial time solutions for all inputs (problems to be avoided or worked around somehow).

I can do RSA by hand (on small messages), quickly tell (with only pencil and paper) what 2^1027 mod 3 is and do Euclid and Extended Euclid by hand to find multiplicative inverses (in one pass). But I can write code that runs pretty well, too, and I can do that with or without a CS degree. So can most people.

There are some interesting exceptional cases where a CS degree can be a disadvantage for developing advanced software applications, though you still need to know CS.

For example, the conceptual framework for reasoning about distributed systems provided by chemical engineering is superior to the traditional CS version when applied to software systems, and more mature. This has been a persistent advantage over the course of my career designing scalable software. And it is much easier for a chemical engineer to learn computer science than the other way around.

I've come across a few other examples of this in computer science, particularly as it relates to complex systems design and behavior, and not just in relation to chemical engineering. Extremely complex real-world systems as a model are relatively new to CS but have highly evolved solutions in other disciplines out of necessity. There is still much value to be had in learning CS from an unorthodox perspective.

No degree here, but it was a unique time in the industry.

Long story condensed: I grew up dirt poor. Went to college. Got my first computer that could get on the Internet (1998). Wasted time online, missed classes, lost financial aid. Ended up going to work for local ISP doing tech support. Quickly moved into web work, and then development. (mostly ColdFusion) This was late 1999, when things were booming and everyone was hiring.

I took a 6 month contract - low on the contracting end of things, but great money for me. Next job was in HR department attached to the airline industry, which was a good job even when the "dot com crash" was occurring. That job ended do to effect of 9/11 on stock prices, but by then I already had a couple of years of work experience under my belt and was on my way.

Today: director of technology for a small company (fancy way of saying I'm the lead developer and lead architect)

What was true for me then is true for many developers today: some are very cut out for this. Looking back, I've always been a programmer; it wasn't a trade someone told me to go to because of the income. That's why I think some bootcampers succeed, and some fail: truth be told, this industry isn't for everyone (alas, I saw many leave the industry in the early 2000s who went on to do accounting or management or car sales or whatever they're a better fit for). Those same students, and myself, would also succeed with a CS degree. I think the lack of one is a matter of circumstance, not a formula for success or failure.

I will say that there are certain jobs I'm not necessarily equipped for due to some missing foundational information. Those situations are the examples that everyone goes to, but the reality is, the world is bigger than SF and FAANG. (And even at the FAANG's there's plenty of Python, Ruby, and JavaScript slingers... the only time they may have used their CS degree was to get past the ego-stroking whiteboard interview)

40 years writing software for a living, dropped out of college after 3 years. I'd taken all the CS that I could, and took graduate level courses my last year because I had run out of other interesting classes. That final year of school just didn't look important compared to getting my dream job at the time (writing games for Atari).

No real regrets, though I had (and still have) a sense of inferiority that drives me to study. Last year I threw out many boxes full of papers that I've read over the years (they're mostly available online now). I have bookcases and bookcases of CS-related material. I've read Knuth, etc. (okay, still going through Vol 4...).

My only regrets are not getting a better math background (a decent calculus-based probability and statistics course would have helped). I took linear algebra in school, but didn't really get it until I started doing graphics and then I needed much more than my college course provided anyway.

Tried going back to school a couple of times. Work always got the better of me. Finally I realized that the degree just wasn't important to myself or my employers, and that I wouldn't learn anything anyway. Lack of a degree has never been a problem when finding a job (except once, and I actually felt pretty good about that one . . . maybe I'll tell the story some day).

I think the key to long-term success (whether you have a degree or not) is continuing self-education. I try to keep up by reading papers and digging into promising new tech. The industry is bigger and moving faster these days, so you have to pick and choose what to stay current on. It's a good idea to branch out anyway (if you read ten papers on storage, networking or graphics, read a couple on something unrelated, like AI or queuing theory or dig into biology or astrophysics -- stretch your head). Helps to do different types of projects, too.

I plan to work until I drop; I feel fantastically lucky to have found a career that I enjoy this much. My father-in-law retired from writing code at age 75, I think I can go longer.

Much like CJ (upthread) I'm a completely self-taught developer. I started building apps to scratch my own itch, and eventually found out the only way to accomplish what I wanted at a larger scale was to build a company. Last year we sold to Facebook, and I continue to develop software as well as manage a team working on our vision.

I'm writing mostly to hopefully let others know you can be self taught and be super impactful.

I've dealt with a lot in my life, and our ride wasn't smooth sailing -- https://twitter.com/randallb/status/1110669172487286784

But regardless, now I build things that are high quality and fun.

25 years in. No CS, just 1 semester of LAS at UIC. Apart from the obvious stuff, have worked on distributed systems and routing protocols, operating system kernels, and compilers. I feel like having to start my career in C probably helped me a bit.

I’m a programmer who studied information technology (with a number of programming courses, but zero true CS coursework) first at community college and then at a budget brand state college. I’m now a senior developer/engineer and frequently work on projects alongside CS graduates from prestigious schools who seem incapable of completing even the most simple coding tasks - this is the case nearly 100% of the time in my experience with these CS grads. That said, I’m sure there are many such graduates that are more than capable, but a persons degree and where it’s from doesn't seem to indicate much other than socioeconomic background.

Most people that graduate with CS degrees took a few actual programming classes. The majority of the rest is a the same well-rounded classwork you took (English, History, etc) and a lot of theory and mixed-theory/applications classes like AI, Operating Systems, Compilers etc.

The practical real-world applications of those classes aren't 1:1 with their first job. I'm a frontend engineer and took 0 classes that are even remotely relevant to my day to day work. That said, foundation adds value. I can speak a common language with other engineers, including those that are completely different than my specialty.

To suggest a persons degree is meaningless is just as nonsensical as saying being self-taught is meaningless. I've also worked with both prestigious graduates that can't program and self-taught brilliant programmers. However, they are exceptions to the rule. The only thing that doesn't indicate much is anecdata, which both of us have now provided.

As an aside, your attitude towards entry-level programmers is likely similar to the attitude of senior programmers when you were entry-level. "Simple" is relative. You were undoubtedly a considerably worse programmer when you graduated as well, assuming your current title was earned through merit. Perspective.

> equently work on projects alongside CS graduates from prestigious schools who seem incapable of completing even the most simple coding tasks

It's possible there's selection bias going on. The wheat end up at the Apples and Googles of the world and the chaff end up working with you.

This isn't intended to be an insult. People who attend ivy leagues are given such a huge leg up that even an average graduate probably make it further than most of us plebeians.

As I said above, these are “CS graduates from prestigious schools” - including ivy league - that I’m referring to and working alongside.

Right...Which is why I was pointing out that perhaps you're getting stuck working with the dregs of the ivy leagues, and that you're experience may not be representative due to bias.

I work in big tech. I know lots of folks who fall into your camp. Anecdotally from interviewing and working with other software engineers, site reliability engineers, software development engineers, and <insert whatever your company calls it here>, how prestigious your undergrad institution was reflects little to none in your ability to solve real world problems. It does help open doors though, as every FAANG I’ve worked at heavily recruits from these schools.

I have worked with some people that are self-taught that ended up being incredibly good. However, I still bias myself a bit to people coming from a CS background because of other non-knowledge related reasons. Examples.

They are more ok with doing 'not fun' stuff, because they have suffered doing a bunch of homework. At work, maybe a percentage of the job is fun, and some things you need to power through. Tuning logs, painfully stepping through the code for the 110th time to find the erratic bug, or boring documentation, also part of the job.

They are less inclined to just copy-paste a solution that you found on StackOverflow and more agreeable to go into the R&D mode of finding the right algorithm. This can be a blessing and a curse.

People that have been through several years of education are more inclined to follow a schedule. We are very relaxed at Silicon Valley and yes some people do their best work from home, but sometimes you just have to be here. College helps form some of these habits.

Last, a degree comes with a lot of soft skills that Universities just throw in sometimes. Communication skills, the ability to summarize properly, grammar and spelling .. not required for a coder but definitely useful for someone that wants to grow into a career into software, eventually you need to interact with Product Managers, Business, Customers, and those unrelated-to-the-job skills start becoming very handy.

I don't buy into the argument that you need to have a degree because getting one is tedious. There are plenty of places in life that will teach you this lesson. I work at a coding school, we have lots of students that did things that make a university look like a joyride. Try doing a tech support job for years 10+ hours a day, now that is tedious.

Is this something that necessarily needs to come from a university? All of the things you mentioned seem like skills one would pick up in an entry-level job. Is there something about a job that makes it easier to never develop these habits?

There's a specific case in France, where most developpers I know don't have a proper "CS degree" but have a more generalist "engineering diploma".

I can even speak for myself. I didn't learn to code at school much , did some bash and C here and there but that was not the point of my study. We mostly had math, physics and electronic-oriented courses and more precisely in my case a lot of telecommunication courses.

Still, for a first programming job, engineers (as in those with an engineering school diploma) are often preferred to people with a CS degree, which did a lot more programming that we did.

I would guess that it mostly has to do with the reputation of both the schools and the students from there. When it comes to STEM, engineering school is seen as much more prestigious than studying in a university. Young people with higher grades wishing to make a career in programming more often than not tend to choose the former over the latter - even if it means less focused courses.

And yet having said all that, I wouldn't say that french developpers are worse in any way than developpers from other places. Even if most of us learn to truly program at our first job.

I'm not at all saying that a CS degree has no point, but as long as you have the minimum knowledge about the field when starting, it's very efficient to learn on the job the specificities.

I've been doing this stuff professionally since 1982 including some stints at what might be called a fairly high level (household name companies in silicon valley). For all the people I've met/worked with, where I ended up hearing their education background, I'm absolutely sure no more than 20% had CS degrees. I also feel like there is a correlation between the extremely good people I've encountered, and _not_ having a CS degree.

That said, most folks did have some sort of science-related degree. People with no higher education aren't unknown, but quite rare ime. People with higher education only in non-science fields have also been quite rare. I haven't run into many shit hot coder history majors, frankly, but those I have encountered were so smart I'm certain they could have aced any degree they took the time to study for.

Last thought: architecture, design and coding seem more akin to creative endeavors such as writing a novel or play, making movies, that don't seem to be easy to "teach". e.g. nobody is marveling that J.K. Rowling doesn't have an English Literature degree (French, to save you checking..) and nobody is seriously trying to "teach" folks to write the Harry Potter series.

Disclosure: EEE major

> I also feel like there is a correlation between the extremely good people I've encountered, and _not_ having a CS degree.

I'm willing to bet there's some selection bias here. If you got a job and don't have a cs degree it's probably because you're so good you don't need a degree. The skills outweigh the lack of a degree, which means higher risk. The piece of paper sets the bar lower because there's more trust and thus lower risk.

As someone getting a graduate CS degree and coming from a different degree I notice that there's definitely Swiss Cheese knowledge. I got here because I could code (half my peers can't in their first year of graduate school. This surprised me a lot!). But on the theoretical side they have less Swiss Cheese knowledge than I do. It's a weird dynamic.

Honestly, as someone who laboured in a CS degree and work as an employee for 10+ years, I feel frustrated that I feel stuck.

It feels like that the reason that I am still working in mediocre jobs is because I don't know how to generate ideas. Or how to make prototypes using design tools. Or how to go about as an entrepreneur.

It's both inspiring and deflating at the same time to people, especially young people, succeed in things that I have dreamed about when I was young.

Between the requirements of a degree and silly things like "10 years experience with X" for a CRUD develeoper, I have a hard time getting through HR when applying for jobs. If I can get to a technical manager or another developer, we can talk shop and show code and I'm good.

Just remember it comes down to who you know or who you can meet, you might as well have worked at Burger King by the way some of the filters work.

I fall into this category. I have no CS degree. I'm the author of numerous things with the best known probably being the ZeroTier network virtualization engine.

I got my first programming exposure when I was 5 or 6 on a Commodore VIC-20. By 10 or so I was doing 6502 machine language on a Commodore 64. I went from there.

I have a BS degree in biology. I studied that because I wanted to study something new, but more importantly because I was interested in AI. I always thought (and still think) the best way to learn about intelligence is to study the only existing examples of intelligent systems. These are found in biology. The University of Cincinnati let me do a little bit of a "design my own major" thing so I designed one in "organic intelligence" with classes in genomics, evolution, neuroscience, and ecology. Those are the four scales at which intelligence is found in nature.

I work in computers now (founder of ZeroTier) but still follow AI and biology avidly and would like to return to some of those areas of study someday. I also find that my study of biology deeply influenced me as an engineer and the types of systems I design.

I'm self-taught, but the thing about being self-taught is that I enjoy learning. Not like whatever some random person says "I enjoy learning" in a job interview, but actually enjoy it such that I've taught myself proficiency in a few different fields. One of the things I decided early on was that I didn't like the thing that is always implied when people say "self-taught" and so over the years I've procured the services of 300-400-level and postgrad tutors of the fields I'm interested in (CS, math, and molecular bio) to help "fill in the holes". It's admittedly a bit weird approaching someone to tutor you without actually being enrolled somewhere, and of course you need to be located near a university, but this has been so helpful for me that I highly recommend this to any of my fellow autodidacts. If you do a little shopping, you can find amazing tutors that won't cost very much at all (and I dunno if it's normal to tip tutors, but I'm a big tipper in general and this has always paid big dividends).

I had been a graphic:web designer since I was 14 years old. I taught myself Photoshop and Dreamweaver and became proficient with creating layouts with frames, tables, and of course eventually css.

I graduated from college with a degree in Philosophy where I was focused on logical systems. I recall one of my favorite professors being intrigued to know whether I could program and disappointed when I confessed that I only did the design side of web development.

I of course had a strong interest in code, having gone through interactive online python tutorials but I wasn’t able to make a the leap into becoming a developer.

The wall, I realized, was my lack of knowledge in the unix command line. Once I learned about bash, ssh, and setting up basic web servers, my learning skyrocketed.

With a background in logical systems, I was able to grasp the model of computing very rapidly. While I cannot claim to be advanced in algorithms or data structures, I feel comfortable being able to develop solutions that work.

With your background picking up algorithms and data structures shouldn't be hard. It's just a matter of studying them like anything else. (I program and my degree is in science.)

Thanks! I hope so too. My current learning material is “Designing Data-Intensive Applications” which seems to involve some data structures.

On algorithms, I think being able to use the work of others is already very empowering. Perhaps one day I’ll get into it deep.

I have no CS degree. I see a lot of these comments poo-pooing the skills of people who taught themselves to program. From my experience, some of the best developers I have worked with do not have CS degrees. I have given many interviews where candidates could explain what an abstract class is, but then when it came time to actually write code they could not even build something that compiled, or their code was really messy and unorganized because they had no concept of maintainable code since they have never had to do anything other than academic exercises where style apparently is unimportant.

It's like they memorized some books and definitions but never actually had to build anything.

The developers that didn't have a formal background in CS almost always did poorly on the technical questions, but I found about half the time it was simply a lack of knowing the terminology. She might not know what a monad is, even though she implemented in her own code.

I have always been into computers, but didn't really consider it as a career until I got a job that required me to do a lot of data entry, so I started teaching myself how to automate things. I turned a 40 hour per week data entry job into a single button click on Monday. This meant I had a bunch of free to time to develop my skills and work on additional programs that would help our organization. I fell in love with programming. I eventually interviewed for a position but failed the technical questions miserably, I didn't understand a lot of the terminology like "linked list", "adapter patern" or what "bubble sort" was. So, after that I got a book just about programming interviews, and realized I had actually implemented most of the practical things in that book, I just didn't know the technical name for it.

After I read that book I interviewed at another location and was immediately hired. The only difference was that I took maybe a week to learn some terms.

I like to think of it as there being two aspects to software engineering: there's the abstraction side, and then there's the craft side. CS graduates tend to be heavily weighted toward the abstraction side, and weak at the craft. Self-taught ones are weighted the other way around.

If you really find someone who reinvented monads independently, don't hog them. Send them to graduate school, they're of another class entirely.

I really appreciate this as a self taught dev with a full time full stack job. I worked my ass off for 3 years, taking online courses, building product after product for people to actually use and ultimately landing a well paying and satisfying job. Things like this make imposter syndrome a little less nagging in my every day life.

That's awesome! Honestly, I have interviewed tonnes of people already that are doing great with no degree. A friend of mine just got a job after taking a few months out to learn from scratch with Udemy, etc

Amazing! :D

Another one of these articles. For novelty, I'm expecting to see an article about the novel idea of there being successful developers who do have CS degrees. It can happen!

The site seems to lean pretty heavily on contradicting the remarkable idea that you might need a CS degree to slap together a website and write some lines of PHP.

But that being said, there's a lot of evidence that some people who don't have CS degrees can do great programming and even great CS, and a lot of evidence that some people with CS degrees can't code their way out of a wet paper bag.

I'm not sure why everyone feels the need to run around with their dresses over their heads every time this comes up; although it does provide a good venue for people to indulge in the harmless pleasure of praising oneself on HN.

Even with a degree the learning process NEVER stops. Most important imo for new developers (self taught or otherwise) is to learn from multiple disciplines. CS without math and statistics is basically mindless data entry. Adding in high level concepts like category theory not only improves you as a coder but deepens your overall understanding of concepts that will allow you to excel in any language or atmosphere. While I think that a lot can be gained from a formal education there are other options provided someone is willing to put in the work. I have done work before getting my degrees and work after and in the end what sets coders and engineers apart is their “portfolio” which is generally a display of their side interests and their willingness to keep learning.

I have no CS degree, but at the time I was in college, CS programs seemed embarrassingly poor compared to today. I took a few, elective CS courses and did CS research back then and remember numerous graduate students trying to cheat off of the undergraduate English major.

I'll say this. There's advantages starting both ways. By starting from a CS background, you're likely to get a formal education into concepts and terminology that might seem boring otherwise. By starting from a non-CS background, you begin with the most important skill a programmer requires-- the ability and passion to teach yourself new technologies and concepts.

Any developer who begins with a CS background can learn to be self-taught.

Any developer who begins without a CS degree can learn algorithms and advanced concepts.

In my opinion,

1. You can be highly educated in a subject without getting a formal degree.

2. A CS degree is not a programmer/developer degree. CS is to programming as art is to drawing.

3. Having knowledge of CS might mean you can more easier adopt to a variety of roles (front-end, back-end, systems programming) but comes at a cost that you probably have less practical skills than someone who is specialized in this (because of self-education/going to a trade school/learning on the job).

I have a bachelor in informatics, master in CS and PhD in informatics (technically informatics is not CS, but there's a lot of overlap), but I would say I gained most programming/development knowledge through internships and working on personal projects.

In my opinion CS degree gets bonus when hiring because it weeds out people that are not interested. With 160 people in same year as me starting it ended up with 90 people getting bachelors, and maybe 60 masters. Then out off all that graduated maybe 30 went into software dev, others went into testing and support roles, maybe even into other stuff not CS related.

If you are starting career, how are you going to convince someone that it is not passing fad for you, that after 6 months you would say "ok I am done, I am bored with it". There is no way to show people how much time you invested in your self study. It is not about what you know, it is about other people getting to know so they can hire you.

> There is no way to show people how much time you invested in your self study. It is not about what you know, it is about other people getting to know so they can hire you.

Your point still holds true in this industry when you get as much as 300+ candidates applying for 1 graduate job. As much as I hate it, unfortunately some companies would hire internal candidates than external ones even if they were highly qualified, because they are highly networked within the company.

Having just a CS degree in 2019 is not enough to market youself as a better candidate. It is meerly seen as a minimum expectation from larger companies.

Typically CS degree means that you can finish something regardless if it makes sense or not. That skill is in demand in large corporations that require people to follow stupid processes and complete tasks that don't reflect on what are the actual needs. Of course there are good CS degrees, but these are not as common as one thinks. The purpose of universities was to gather knowledge and pass it on where it was not possible otherwise to do so. These days people have open access to all kind of knowledge and universities are not as much important as they were. If company lists CS degree as a job requirement, that for me is a good indication of a place I don't want to work in.

I’m self taught and do data science for work and game dev for hobby.

Functional programming has seemed much easier to pick up without formal teaching than object oriented. The latter appears to have many more unknown unknowns.

e.g. in game dev I did not know that static methods and objects existed, so I built a bunch of dictionaries in an instance of a single use class to store some data for a game. It works, but its garbage.

But hey, all things are discoverable eventually, and I would argue going through the experience of why things are nice before learning they exist has some merit to it. I don’t blame companies which require credentials though. Hiring is hard, especially hiring many people at once.

The knowledge earned with CS degree is priceless on tech interviews - where else can you be asked what red-black trees are and O(x) notation for hash map. When you hired it's different, just get this damn Hibernate mapping working)

I am trying to transition from C programming on Tandem(also called HP/Nonstop) to Java and web technologies. The main reason I want to move out of Tandem is that there are only few companies having that system and jobs are few. I have basic Java knowledge but don't have any experience developing for web. The new jobs posting all talk about lot of skill set - Struts, Spring. When I got a job interview I got unrelated things like Solr. Each of these frameworks seems to be massive. How do I proceed to level up to the current technologies? Your help is much appreciated.

Switching from C to Java with Spring/Struts shouldn't be that hard, because you are still on the safe side (the server). The real fun with web technologies starts when you are in the browser.

So if you have no prior experience with the web-technologies, I would recommend you to learn a bit of HTML/CSS/JS until you are familiar with them (build a simple, plain HTML page, add some CSS to change the layout, throw in some JS to load some content asynchronously and maybe add some JS buttons to make the page interactive via JS (e.g. change the content when pressing a button)). Nothing too fancy, just make should you know what every language looks like and which language to use for what use-case.

Next, you should find out which Java Framework you really need to learn. When I learned Struts 2 a couple of years ago, I remember that it was considered outdated already.

And then start doing the tutorials of the frameworks, followed by building something you want to build with those technologies (start small and keep adding stuff). At least that is the path of the self-taught developer.

Thank you

I'm a 40ish FAANG Manager without a CS degree. I would point out that while I agree that it is possible to have a great development career without a CS degree, I wouldn't recommend doing it this way if you have a choice. So, if you are contemplating dropping out or skipping doing a CS degree and going right into the industry, you are going to face obstacles and bias throughout your career that having the CS degree will mitigate.

No one second guesses a CS degree, but a good chunk of CS grads (your future coworkers and hiring managers) will second guess a self-taught education.

What about a degree from a school that has a bit of a 'degree mill' reputation - https://www.wgu.edu/online-it-degrees/computer-science.html - pretend that's someone's only choice.

I'm a CS major at the moment.

I learn some of the most interesting shit that I would never have thought to teach my self. Data structures, discrete math, and theory of computation come to mind.

Learning about how grammar and linguistics are so heavily tied into CS has been eye opening and has helped me understand so much more about what's going on in a computer. I never would've learned that on my own.

Sure, probably don't need that to get a job as a developer. But, having a CS degree != being a developer in the first place. I get that they can go hand in hand but it's just not the same.

I am mechanical engineer and still working as a mechanical engineer. I started to coding when i was 16yo.(now 31)I still yo contunie to side projects. I am not succesfull in side project(due to ideas)

I'm a self-taught Senior Engineer doing this professionally for the past 10 years. I've never taken a single course in Computer Science and dropped out of business school to start my own. Amazingly, some of my work has been used by universities, 20 million have watched my Programming YouTube channel and 50k+ have signed up for my online courses.

Most companies don't have a hardline requirement for having a degree anymore, but if they do, even for management, I'll do my best to avoid them.

Last thing, I started coding at 28.

No degree here. Started programming when I was 14 on MUDs. I actually went to college for CS, quit, went back 6 years later, and quit just shy of my BS. I need 9 or so hours. I moved to another state and didn't want to go through the transfer process and probably end up taking repeat classes...

I'm at the ceiling pay-grade wise now, and burnt out, but that's another issue :) The moral of the story is, you can progress really well in this field if you can prove yourself. Experience > Education

It is luckily easy to prove what you can in IT, as you can just show own succesful projects. But at least in germany here, you will still have a hard time getting the same pay, no matter the actual skills, as they are very often bound to formal education.

I also have no CS degree, I have a law degree though. I could say that "development" is like lego construction - yeah you can do that with a very specific preparation, but nobody actually stops you from reading the F manual ( RTFM ) and do it on your own.

However I think that people loving the job are better than the ones that were learning for it, so no wonders sites like this exists.

And in any case I wouldn't go to a self-taught doctor, so something will probably change in the future.

I just quit my old job after 10 year at the company 6 of which I was an App Dev for. I applied for several jobs did three interviews for Sr. Dev positions and received 2 offers. After I received each offer I expressed that my highest level of education was a GED, each time it was stated that is not a problem. I don't even have an education portion in my resume. It's been a non-issue so far.

It's interesting that not having a degree is equated to being self taught developer. What if you chose to take all CS major courses but nothing else? University degrees are supposed to give you generic background on many subjects, on which you can specialize later, not to set you up as a "developer". This is why it is even called computer "Science" and not "dev ops certification".

So I'm a noob with Ghost: if anyone wants to subscribe to the Friday newsletter you can here: https://mailchi.mp/67e1bf258afa/nocsdegree

By the way, my site does use HTTPS and for analytics, Simple Analytics so no cookies.

No CS degree is fine when you’re doing trivial programming work that doesn’t really matter, such as application frontends.

But could you imagine riding in a plane or using critical infrastructure services programmed by people with absolutely no computer science degree to their name? Not a chance. Like getting surgery from a butcher.

Ehmm ... do you think all airplane programmers are CS graduates? They are not. At least not at SAAB. Actually, very few are CS. Most are mechanic, electric and fluid engineers.

In at least Sweden's machine industry programming is just something you learn in your engineering role by osmosis and revulations from God, and typically one to three 7 week courses at university.

Volvo Cars, Volvo Trucks, Scania, SAAB etc.

People with CS degree have more theoretical knowledge, for sure. But people without it, self taught, have more practical knowledge, cause they simply done things instead of learning about them. Decide yourself, which is better.

I don't think that many self taught developers have any practical knowledge related to avionics control systems, there is only so much you can do on your own.

People who get jobs without a degree don't invalidate the people who do get a degree. Or that there are use-cases where a degree is necessary.

Luckily, the planes keep flying and the infrastructure keeps working whether you can imagine using them or not.

I'm confused how you accomplished anything without some type of looping abstraction. If you understand one of them most of the rest are fairly intuitive except looping with recursion. It just seems bizarre that you were working somewhere and being productive without knowing what a for loop was.

It sounds a bit like an ad for the site he mentions, I’m not sure how you can miss for loops.

The value of college to me was mainly the degree and an internship that resulted in a good reference. Nobody in practice seems to care about personal or volunteer projects unless it's maybe contributing to Mozilla or something. Degree is necessary to be interviewed by 99.99% of openings.

How many working developers actually have CS degrees? When I began a long time ago it was quite rare. In fact most of my peers had liberal arts degrees. I definitely meet more CS grads among younger devs now, as well as EEs and SEs, but I wonder what the actual breakdown is these days.

I just find these odd. Does anyone struggle with this stuff? They just make it all look so easy.

I for one struggle quite a bit with coding, design, theory, and other aspects. I just don't get how so many people think coding is as easy as "reading a book" or "doing a tutorial".

Well, you're literally writing step-by-step instructions that a computer will faithfully perform without deviation. Once you understand how a computer works and how to talk to it, it should be as easy as having a conversation.

I don't think this is easy, but when you've been doing it for years and years, it feels that way.

Computers don't even operate solely step by step anymore. They often operate asynchronously, through interrupts, or compute things in parallel across multiple threads.

Maybe if you're programming something simple, it will be "step by step". But most programs are not this simple.

"Coding" is as meaningless a term as "writing". Much in the same way you can leverage basic writing skills to achieve entrepreneurial success, you can do so with coding skills. A literary academic may still consider writing to be a substantial exercise, probably more so than the untaught.

That's because the academic knows not to produce low quality content. The untaught often does not. I'm still reeling from having to maintain spaghetti code that some untaughts have churned out in my career.

> They just make it all look so easy.

> spaghetti code that some untaughts have churned out

Now we see both sides of the coin.

I'm a dev with no formal education of any kind, but self taught math and CS. I think it helped me a lot to be exploring the concepts out of a passion for understanding and seeking truth, rather than doing homework I don't understand or care about.

Can we have an interviews with people who failed to self-taught themselves to developers? We know about a lot of examples of successful people who dropped college, but what about those people who dropped college and achieved nothing?

i'm self taught without a CS degree. I filled in many of the gaps by studying for technical interviews. I can rattle off every type of data structure, every type of classical algorithm (even the inefficient ones for historical reasons), write HLDs and LLDs and sequence diagrams and component diagrams, and can work my way through almost every problem on those leetcode type sites (if given enough time).

can i write a compiler or a lexical parser or am I versed in distributed computing and/or other highly specialized technical areas? not off the top of my head, but give me a few days/weeks and I know I'll be able to.

"Only autodidacts are free." - Taleb.

Every one will have knowledge gaps, the skills for CS degree and real world programming will have some overlap, but there is whole lot of distinction in both.

I am very glad for having studied software engineering at university. I believe it's more productive to learn when we have guidance, colleagues and a proper environment.

While I don't have CS degree, I studied 3 years for BS and got some ideas and associations that I can explore more when needed. Not quite 20:80, but maybe like 50:80.

I grew up surrounded by computers, but took relatively few classes. I took AP Computer Science in high school, but had to teach myself the “B” part of the class because the other students couldn’t keep up and our AB class just reverted to just the A portion but that was too easy for me. I also took an “honor programming in C” class from the same teacher, but it was essentially just two hours a day for me to program silly games using some Borland graphics library. I spent a lot more time being familiar with networking at the time really, and despite the CS parts seeming easy, anything web related outside of HTML was a mystery to me.

I did music for college and the only programming I did was in csound and max/msp.

Long story short, music doesn’t pay much. I just started reading and doing programming. I got gigs almost immediately for solving simple data problems for people (extract these CSV files into this format and pull down web data, etc). Fortunately I had companies where they were happy for me to take on whatever programming I felt comfortable with, despite being in a non-dev role originally there.

12 years later, I’m damn good at this. It helps that I can generally just read a book and absorb it. I’ve read books on CS, but haven’t taken any more CS classes outside watching some MIT course 6 videos. I did take some machine learning classes at MIT over IAP and those were fun. One weird thing, I’ve never taken beyond pre-calculus, but the linear algebra stuff in most ML things isn’t that hard for me. Maybe I’m just lucky? I’m a total hack at math, but can understand concepts quickly still and apply them in code.

One weird quirk was that I had to learn that not everyone can learn like I can. I taught for a few years at General Assembly and learned immediately that most people don’t like being throw in the deep end, or being told to read something and apply it the next day. They need smaller and better defined problems to build confidence. Only 5% of student actually enjoy things on hard mode. That’s ok- it’s just different than me.

Like, at work right now I’m probably going to need to do some Go work. I’ve never used Go outside the first 10 project ruler problems. But- I don’t mind telling them that sure, I can do some work in Go. It’s just code, and if I sit down for 8 hours I can get decent with the language.

The only things I’ve encountered so far that felt were “hard” were Haskell, and anything with shaders and modern 3D programming. I’ll figure them out eventually. TouchDesigner has also been tricky, but it’s mostly that their documentation is scattered (so much in videos) and the ui/workflow is non-obvious. I should write a book on it.

Interesting. I am starting to teach my siblings to code (they are with non-cs degree) and don't know where to start. Do you guys have any thoughts about this?

I am sure there are people who disagree, but if someone really wants to learn about 'Coding and Computers', my choice would be Go.

Let me explain: When I learned to program, QBasic was the first language I had contact with. I could make the computer beep but never achieved anything useful. Next, I learned HTML and was very happy about creating something. In school, I learned a little bit about Delphi and while GUI programming was cool, I preferred doing things on the web. A little time, later I came across PHP and was finally able to create real websites. So I coded a few projects with PHP and had my first struggles with arrays and the likes.

Finally, I arrived at the stage where I wanted to learn a real programming language. So I learned C. C was great. I mean, it was also very complex, but finally, I had control over every bit.

At that point, I started a CS degree and learned about pure languages like Smalltalk (Object Orientation) and Scheme (Functional Programming). Those languages were beautiful but felt like a step back in terms of practicality.

When the JS frameworks poped-up I learned to use a few of them too and still use some of them today and while JS is a great language to create results, it doesn't feel to me like a language that teaches you how to write good code.

Along the way, I encountered other languages like Java, C++, Python, Rust and those are certainly not bad languages, but I wouldn't recommend them for beginners.

What makes Go so special, in my opinion, is that it reduces the complexity of C while not taking away its purism. It comes with all the tools you need (except a text editor) and encourages to write good code. Finally, it has good support for building web applications so finding a good use-case shouldn't be that hard. After all, good use-cases motivate students ;-)

I am well aware, that one could certainly argue for every programming language to be the perfect candidate, so please remember that this is a personal opinion.

Thanks! That's an interesting perspective. Golang is getting more traction, maybe I will take this road. However, I don't want to intimidate first learners with difficulties of the language. All languages are similar in some way.

Headline cutoff on iPhone SE:


I'm a Financial Analyst, CPA, CIA, CTA, Statistician, Expert System Developer, Using Clojure, R, core.logic, PostgreSQL, etc.

All professional knowledge is self-learning. The founder of The Pure Function Pipeline Data Flow.

[The Pure Function Pipeline Data Flow](https://github.com/linpengcheng/PurefunctionPipelineDataflow)

As a member of the very creative `self-taught developers`, I was surprised to find that I was downvoted. Why is that? :-)

I'm listening to the excellent BBC podcast 13 Minutes to the Moon about the Apollo program, can you guess how many CS degrees worked on programming the Apollo Guidance Computer?

In my opinion, software is more of an art and design discipline than other types of engineering. The traditional notions of what constitutes an engineer do not apply as much to software. This is clear in the fact that we have no formal certification.

The most important thing that my CS degree taught me is to recognize that I know nothing.

I'm self taught but went to CMU (not for cs) so employers don't care

Love this site, so much hope and possibility in these interviews!

Thank you! Next email comes out on Friday. If you subscribe of course :)

Brilliant! Congrats on shipping such a marvelous project!

Are CS degrees supposed to teach how to code?

You write code to demonstrate what you're learning, but you don't learn any one language in depth enough to be productive from day 1 at any new job.

Shit. What about NO DEGREE in general?

Cant subscribe to newsletter on android/firefox with ublock origin Please add a no js form to subscribe

I'm a mostly self-taught CSE with no CS degree, with well over 25 years of professional experience. I feel that not having the degree has stunted me in some ways, but has also gave me a bit more freedom in others, because I could explore areas for solutions without realizing "how things are done".

That can be both a good and a bad thing.

Lately, I've been exploring other areas of CS which have always interested me, even as a child with my first computer, namely that of "machine learning". Where I have found I fall down in that area is in understanding the deeper level math concepts. I know these aren't really required to come up with solutions to problems using the existing toolsets for machine learning (as long as one can understand the math and concepts at those levels, which is arguably simpler) - but not having that understanding (or only a partial understanding) makes me frustrated that I can't understand exactly what is going on inside "the black boxes".

For instance, I (mostly) understand how MSE and backprop works in a neural network. I also understand why and when to use RELU vs sigmoid (or some other activation function). But could I derive any of that from first principles? Not at my current level of understanding (all those damn rules of calculus - which I don't understand). In many cases, though, I don't need to - I can treat them as a black box. But I don't like it. I do intend to fix this someday.

Of course - this subject - machine learning - has over the years led me down interesting and surprising paths (long before I started really studying it as a subject, in 2011, when I took the "ML Class" and "AI Class" MOOCs). Things more philosophical in nature, but all seemingly related in some manner, at least to my mind:

* Chaos theory

* Network theory

* Emergence and Complexity

* Theory of Mind

* Various topics in neuroscience

* Various topics and ideas in psychology

* Etc

...with "Etc" encompassing robotics, engineering, electronics, ethics, history, religion - and all the interactions and branches and spaghetti in between.

So much of that I wish I could have a more formal grounding in; I also wish I could speak with (and have the language to speak with) those who have this knowledge and grounding. I know that to be an impossibility, even if I were 20-30 years younger.

It astonishes me that many don't see how much CS in general touches and interacts (and both informs and is informed by) with all those topics and more. I see this, even if I don't understand it completely, and sometimes wonder or suspect that maybe I am wrong at some level? Maybe the lack of a formal education in all of those subjects has caused me to see things which aren't there...?

Alternatively, it could be that by not having such an education, I am - like before - not "constrained in a bubble" so that I don't see those things?

I am not saying I am special in this regard - I have read and spoke with others who have similar ideas to one extent or another, and in many cases their understandings have informed mine.

I'm just not sure if I should focus narrowly at this point in my life at 46 years of age, or go more broadly; both are fascinating paths for me. From what I have seen and read, it seems like the "broad path" would be more immersion in studying philosophy, perhaps with a greater focus on the philosophy of mind and/or consciousness.

At the same time, I like to think about and focus on the idea (and fantasize of solving it - fat chance) of the "wrongness" of backprop - and whether another solution exists for neural network learning that is more biomemetic?

...and at this point, I'm rambling - so I'll shut up.

Why does this title presuppose that people with CS degrees can't also be self-taught? A degree is a piece of paper that employers need; it has little to do with learning anything useful.

Because you’re not self taught if you have a degeee.

You can still teach your things, but as soon as you submit to formal training you are no longer “self taught”. That’s what self taught means.

Firstly, depends on the university - not all degrees are equal. I did most of a degree after working in the industry for seven years, and having programmed on and off since the zx81 - the degree was pointless. Only one course was interesting, AI, and the only time I've ever used that knowledge is tinkering at home.

> not all degrees are equal

Hm - maybe not, but why is that, exactly? I don’t think that anybody believes that if you admit an otherwise stupid person to Harvard, they would become intelligent through the instruction they’d receive there. Instead, the degree and the institution are a signal - this person had to have been smart in the first place to get in, so you can assume that they’re going to do smart things for your business.

I think for anyone that started programming in the early days of home computers like the ZX81, C64 and BBC Micro, except for the fundamentals, most CS courses seemed to be completely useless. I cannot honestly say anything I learned in my course was useful compared to pursuing my own interests.

I missed undergrad, and managed to weasel my way into graduate school after 15 years as a programmer. ultimately research isn't for me, but I found basic CS theory both interesting and useful in my later life.

certainly agree that the systems and programming coursework wasn't particularly useful.

There is no such thing as self-taught, (doesn't even make sense). No one opens a computer, figures out how the processor takes instructions and invents their own language. If you went to college, you listened, you studied, and you practiced. If you did't go to college, you studied, you practiced, and you had to have found someone who will answer your questions.

It's hard for everyone to enter the industry, especially now, college or not. It's not about how smart you are, or your identity, or your environment. It's how bad you want it, how hard you'll work for it, and if someone is willing to help you.

As software engineers, degrees or not, focus on that last part. Be there for someone learning, studying or just trying to figure it out. Feels great to see a finished product. Feels even better to teach someone how to fish, (code for money). I wouldn't be here if it wasn't for people along the way, giving pointers, telling me where to look, telling me what not to do. I was a gawd dang line cook. Be that helpful person.

Make peace with this fact: you can most definitely build businesses and add value to any organization. But you won't be able to optimize Twitch's video codec or any other very low level, uber-specific, high impact code.

Business need both types in this world. No shame in that, but don't lie to yourself into thinking that you can do _both_ with no CS degree. You can't.

Nonsense. You can absolutely teach yourself to optimize low-level code if that's what you want to do. The amazing thing about today's world is that all of the incredible resources available for learning just about anything in science and engineering to anyone who has the time to consume them. And you can work on open source projects to build your native skills.

The difficult part for you will be obtaining an interview. Because all of the other candidates will have CS degrees, and increasing numbers of them will have graduate degrees. You are at a disadvantage.

The main difference is that more resources are now publicly available to everyone to look up on the internet which was a different story 40 years ago. This is why companies at the time hired grads that can re-implement closed-source software from scratch from a reference spec or by reverse-engineering from another company to stay ahead. This has happened with device drivers and closed-source compilers.

To some extent open-source has removed the cost for reinventing libraries, reverse engineering and there is little need to study specific elements in a subject to solve such a problem when you can grab lib_whatever or a free compiler for a language.

You are right that in interviews at famous companies (FAANG, asset management companies, aerospace / embedded systems companies) being self-taught here isn't enough. Instead, they require specific certifications and they look for the graduate with a strong engineering degree rather than someone who is self-taught.*

Right now in 2019, I would do both.

*Having a serious open-source project or significant contributions is actually a huge advantage over recent graduates.

The other difficult part is to put aside time and money. I mean the information is most likely free but you still need food. Food is not free. Then you have to work so you can buy food. If you work, you will have less time to study by yourself.

In this sense, UBI is a godsend. But of course, we assume all actors are rational and self-disciplined.

How would a CS degree help with any of that? I'm someone with experience in weird uber-specific, low-level areas of computer graphics/imaging with no CS degree, and none of the CS graduates I know have been taught those things at university.

Some PhDs and math students yes (at least, with regards to the algorithmic portions), but otherwise you have to learn the low-level esoteric stuff on your own, or be lucky enough to have a specialized optional course at your university.

And the cutting-edge will rarely be available to undergraduates anyway. All my CS graduate colleagues learned about codecs was how to compute a DCT by hand - they certainly didn't learn the modern 4x4 and 8x8 spatial block transform approximations as used in h264, or any motion vector calculation algorithms, or the x86_64 SIMD intrinsics, or any of the modern entropy coding methods.

I agree. Nothing in a typical CS degree would help with this. Maybe if your Masters was specifically in this obscure part of the field. On the other hand, I used to work in the video game industry where degrees (used to be) relatively rare and I probably knew 12 different guys who could optimize this kind of thing in their sleep.

So you're saying a highly motivated individual with an access to World Wide Web and physical textbooks can't teach him/herself to optimize "Twitch's video codec" or any low-level problems on their own ?

Everything is against you. You probably won't.

Applications are open for YC Winter 2020

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